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的数据。
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的数据。