在DLL中创建线程,调用Synchronize后,线程不能执行(100分)

  • 主题发起人 主题发起人 btdingzi
  • 开始时间 开始时间
B

btdingzi

Unregistered / Unconfirmed
GUEST, unregistred user!
我在DLL中创建线程处理数据,将处理进度通过回调的方式报告给应用程序主窗体显示,
在线程的Execute过程里执行Synchronize(sendmsg)(sendmsg过程里调用回调函数),发现线程不运行(即使sendmsg过程里为空代码),
如果在线程的Execute过程里不执行Synchronize(sendmsg),则线程运行正常,
不知如何解决。
 
到Synchronize(sendmsg)时线程当然不运行了,在等主线程啊
 
我想把问题解释一下:
比如,在主线程里创建一个过程:
procedure TForm1.Disp(Msg:string);
begin
memo1.lines.add(Msg);

end;
然后将“Disp”传递到DLL,在DLL里的sendmsg中:
procedure dllthread.sendmsg;
begin
Disp('test');
end;
出现了我提出的问题,如果我把 Disp('test');
加到 线程的Execute过程 里,主线程能收到消息并显示,可是这样使用线程是不安全的。
 
建议你用临界区了,这样我试过可行的
 
使用临界区,解决了
 
后退
顶部