如何在IdTCPServer 的OnExecute调用一个非线程安全VCL的方法,用Synchronize好像不行 ( 积分: 100 )

  • 主题发起人 主题发起人 liuchong
  • 开始时间 开始时间
L

liuchong

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在IdTCPServer 的OnExecute调用一个非线程安全VCL的方法,用Synchronize好像不行?
 
synchronize只能调用不带参数的
 
用事件不就可以了,这个是最简单的方法,还可以带有参数。
 
OnExecute就是事件啊
 
可以通过全局变量来传递参数!
 
TFrom1=class(TForm)
private
param1: String;
procedure syncproc();
...
procedure TForm1.IdTCPServer1OnExec(...)
begin
param1 := 'xxxxxx';
TThread.Synchronize(syncproc);
end;
procedure TForm1.Synchronize();
begin
UnSafeVCLProc(param1);
end;

显示代码如上:
但这个方式可能会有主线程在等待工作线程,而工作线程也在等待主线程的死锁问题,要小心仔细搞清楚。
 
后退
顶部