From 0de78a034aa78df9851c75a5c1d8b6d7a9af1f37 Mon Sep 17 00:00:00 2001 From: tslediter Date: Sun, 28 Apr 2024 17:36:54 +0800 Subject: [PATCH] =?UTF-8?q?=E7=95=8C=E9=9D=A2=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 鏇存柊 --- designer/utslvcldebuger.tsf | 4 +- funcext/tvclib/ugtkinterface.tsf | 65 +++++++++++++++-------------- funcext/tvclib/uvclthreadworker.tsf | 20 +++++++-- 3 files changed, 52 insertions(+), 37 deletions(-) diff --git a/designer/utslvcldebuger.tsf b/designer/utslvcldebuger.tsf index 1f55fa6..dfea96a 100644 --- a/designer/utslvcldebuger.tsf +++ b/designer/utslvcldebuger.tsf @@ -905,7 +905,7 @@ type TTslDebuga=class(TCustomControl) if recvtype=0 then begin FRemoteWait := 0; - ExecuteCommand("showstr","调试结束"); + ExecuteCommand("showstr","\r\n调试结束"); if FConnectchannel then dbgdeletechannel(FConnectchannel); FConnectchannel := 0; g_tsldbgcallback_handle := nil; @@ -1019,7 +1019,7 @@ type TTslDebuga=class(TCustomControl) end FRemoteWait := 0; if FCurrentgotoitem and FCurrentgotoitem.FEditer then FCurrentgotoitem.FEditer.ExecuteCommand("ecruningto",nil); - ExecuteCommand("showstr","调试结束"); + ExecuteCommand("showstr","\r\n调试结束"); toolbtnState("停止"); return; end diff --git a/funcext/tvclib/ugtkinterface.tsf b/funcext/tvclib/ugtkinterface.tsf index 4852786..3fe06b2 100644 --- a/funcext/tvclib/ugtkinterface.tsf +++ b/funcext/tvclib/ugtkinterface.tsf @@ -4251,7 +4251,7 @@ type tgtkapis = class() //gtk _f_ := static function():integer;cdecl;external getfuncptrbyname(0,functionname()); return ##_f_(); end - procedure gtk_main (); + procedure gtk_main(); begin _f_ := static procedure();cdecl;external getfuncptrbyname(0,functionname()); return ##_f_(); @@ -4268,7 +4268,12 @@ type tgtkapis = class() //gtk gtk_main(); g_idle_remove_by_data(idledata); //删除idle return 1; - end + end + function g_main_depth(); //Returns the depth of the stack of calls + begin + _f_ := static function():integer;cdecl;external getfuncptrbyname(0,functionname()); + return ##_f_(); + end function g_main_loop_new(ctx:pointer;is_running:integer):pointer; begin _f_ := static function(ctx:pointer;is_running:integer):pointer;cdecl;external getfuncptrbyname(0,functionname()); @@ -4279,6 +4284,11 @@ type tgtkapis = class() //gtk _f_ := static procedure(loop:pointer);cdecl;external getfuncptrbyname(0,functionname()); return ##_f_(loop); end + function g_main_loop_get_context(lp:pointer):pointer; + begin + _f_ := static function(lp:pointer):pointer;cdecl;external getfuncptrbyname(0,functionname()); + return ##_f_(lp); + end function g_idle_add(f:pointer;d:pointer):integer; begin _f_ := static function(f:pointer;d:pointer):integer;cdecl;external getfuncptrbyname(0,functionname()); @@ -4315,35 +4325,34 @@ type tgtkapis = class() //gtk return ##_f_(source,cr); end function g_source_attach(source:pointer;ctx:pointer):integer; - begin - _f_ := static procedure(source:pointer;func:pointer;data:pointer;notify:poiner);cdecl;external getfuncptrbyname(0,functionname()); - return ##_f_(source,func,data,notify); - end - function g_source_set_callback(source:pointer;ctx:pointer):integer; begin _f_ := static function(source:pointer;ctx:pointer):integer;cdecl;external getfuncptrbyname(0,functionname()); - return ##_f_(source,ctx); + return ##_f_(source,ctx); end - + function g_source_set_callback(source:pointer;func:pointer;data:pointer;notify:poiner):integer; + begin + _f_ := static procedure(source:pointer;func:pointer;data:pointer;notify:poiner);cdecl;external getfuncptrbyname(0,functionname()); + return ##_f_(source,func,data,notify); + end function g_main_context_default():pointer; begin _f_ := static function():pointer;cdecl;external getfuncptrbyname(0,functionname()); return ##_f_(); end - function g_main_context_pending(gc:pointer):integer; + function g_main_context_pending(gctx:pointer):integer; begin - _f_ := static function(gc:pointer):integer;cdecl;external getfuncptrbyname(0,functionname()); - return ##_f_(gc); + _f_ := static function(gctx:pointer):integer;cdecl;external getfuncptrbyname(0,functionname()); + return ##_f_(gctx); end - function g_main_context_iteration(gc:pointer;bk:integer):integer; + function g_main_context_iteration(gctx:pointer;bk:integer):integer; begin - _f_ := static function(gc:pointer;bk:integer):integer;cdecl;external getfuncptrbyname(0,functionname()); - return ##_f_(gc,bk); + _f_ := static function(gctx:pointer;bk:integer):integer;cdecl;external getfuncptrbyname(0,functionname()); + return ##_f_(gctx,bk); end - function g_main_context_get_poll_func(d:pointer):pointer; + function g_main_context_get_poll_func(ctx:pointer):pointer; begin - _f_ := static function(d:pointer):pointer;cdecl;external getfuncptrbyname(0,functionname()); - return ##_f_(d); + _f_ := static function(ctx:pointer):pointer;cdecl;external getfuncptrbyname(0,functionname()); + return ##_f_(ctx); end function g_source_is_destroyed(source:pointer):integer; begin @@ -4370,14 +4379,12 @@ type tgtkapis = class() //gtk function gtk_drag_get_data(w:pointer;c:pointer;ls:pointer;tm:integer); begin _f_ := static procedure(w:pointer;c:pointer;var ls:pointer;tm:integer);cdecl;external getfuncptrbyname(0,functionname()); - return ##_f_(w,c,ls,tm); - + return ##_f_(w,c,ls,tm); end function gdk_drag_status(c:pointer;ac:integer;tm:integer); begin _f_ := static procedure(c:pointer;ac:integer;tm:integer);cdecl;external getfuncptrbyname(0,functionname()); - return ##_f_(c,ac,tm); - + return ##_f_(c,ac,tm); end function gtk_drag_dest_set(w:pointer;flgs:integer;targets:pointer;ntg:integer;actions:integer):integer; begin @@ -4388,8 +4395,7 @@ type tgtkapis = class() //gtk function gdk_drag_context_list_targets(c:pointerr); begin _f_ := static procedure(c:pointer);cdecl;external getfuncptrbyname(0,functionname()); - return ##_f_(c); - + return ##_f_(c); end function gtk_selection_data_get_text(d:pointer); begin @@ -4401,8 +4407,7 @@ type tgtkapis = class() //gtk begin _f_ := static function(d:pointer):pointer;cdecl;external getfuncptrbyname(0,functionname()); return ##_f_(d); - end - + end function gdk_atom_name(a:pointer):string; begin _f_ := static function(d:pointer):pointer;cdecl;external getfuncptrbyname(0,functionname()); @@ -4473,7 +4478,6 @@ type tgtkapis = class() //gtk end function gtk_drag_finish(ctx,suc,del,tm); begin - //return ; _f_ := static procedure(ctx:pointer;suc:integer;del:integer;tm:integer);cdecl;external getfuncptrbyname(0,functionname()); return ##_f_(ctx,suc,del,tm); end @@ -9691,8 +9695,7 @@ begin return 1; end return 1; //r - end - else + end else begin tslprocessmessages(false); //sleep(10); @@ -9704,8 +9707,8 @@ begin tslprocessmessages(false); //sleep(10);//休息一下 end - unit(uvclthreadworker).RunThreadWorkerHost(); - if r=0 then sleep(30); + if unit(uvclthreadworker).RunThreadWorkerHost() then r := 1; + if r=0 then sleep(25); //get_m_m_q().idleworked := r; return true; end diff --git a/funcext/tvclib/uvclthreadworker.tsf b/funcext/tvclib/uvclthreadworker.tsf index 1de5724..5f73e0e 100644 --- a/funcext/tvclib/uvclthreadworker.tsf +++ b/funcext/tvclib/uvclthreadworker.tsf @@ -65,10 +65,21 @@ type TCustomThreadworker = class(t_worker_host) if not FThreaders then return ; set_heartbeat(); lsdata := nil; - for idx,i in mrows(FThreaders,1) do + ///////////////打乱排序避免某些线程消息总是滞后/////////////////// + idxs := mrows(FThreaders,1); + if idxs then + begin + for idx,i in idxs do + begin + idxs[idx] := array(i,random()); + end + idxs := sselect[0] from idxs order by [1] end ; + end + ////////////////////////////////////////////// + for idx,i in idxs do begin o := FThreaders[i]; - msg := o.fetch(data,nil,lsdata); + msg := o.fetch(data,true,lsdata); if msg then begin case msg of @@ -101,7 +112,8 @@ type TCustomThreadworker = class(t_worker_host) o.DoOnMessage(data); end end; - break; + return true; + //break; end end end @@ -261,7 +273,7 @@ end implementation function RunThreadWorkerHost(); begin - class(TCustomThreadworker).dispatch(); + return class(TCustomThreadworker).dispatch(); end type t_worker_base = class() function Operator [](idx);