问高手,关于:DLL、多线程、回调函数的问题。DLL中的线程调用回调函数需要同步吗?如何同步?(50分)

  • 主题发起人 主题发起人 qqjm
  • 开始时间 开始时间
Q

qqjm

Unregistered / Unconfirmed
GUEST, unregistred user!
昨晚写了个测试的程序:
  DELPHI写了一个包含线程的DLL然后写一个EXE调用这个DLL。
做测试的时候发现,在线程里直接调用回调函数和通过事件来调回调函数都可以正常运行。但是如果用Synchronize()来调用回调函数则线程会在这步停止了。没有执行回调,也没有往下执行。
  DLL中的线程回调需要同步吗?如何同步?
部分代码如下----------------
procedure TMyThread.Callback;
begin
FunCallBack(); //回调函数
end;

procedure TMyThread.Execute;
begin

sleep(1000);
//直接调用回调函数
Callback();
{到这里正常}
//利用事件调用回调函数
self.EvCallback := Callback;
EvCallBack();
{到这里正常}
//通过同步调用回调函数
Synchronize(Callback) ;
{线程停在这里,无法继续运行,也没有提示}
..........  
end;
---------------
注:主程序会在DLL的线程调用回调函数后显示一个Messagebox进行提示,并且修改窗口中Edit1的数据。
 
不大清楚,帮顶下,顺便问一下下面的话是不是少了几个字,
"在线程里直接调用回调和能过事件调用函数都可以正常运行"
能过事件? 读起来怪怪的:)
[:D]
如果不用Synchronize 呢, 回调函数主要做了什么
 
呵呵,是写错了。
=====================
更新程序的界面。
执行了如:
Form1.Edit1.Text:='XXXXXXXXX';
MessageBox(Application.Handle,'XXXX','XXXXX',MB_ok);
的语句。
 
Synchronize是为了要保持同步,你说了?
 
后退
顶部