CheckSynchronize()
。相比于Delphi 7中,CheckSynchronize()
似乎在Delphi 2009中被调用得更少,但我们无法弄清原因何在。将此代码放置在:
procedure TMyForm.FormCreate(Sender : TObject)
Classes.WakeMainThread := WakeMainThread;
end;
procedure TMyForm.WakeMainThread(Sender: TObject);
begin
SendMessage(Application.MainForm.Handle, WM_NULL, 0, 0);
end;
正常情况下,事情进展顺利。但是当线程在模态应用程序中死亡时,我收到了rtl120.bpl模块中的EAccessViolation
错误(对于简单的对话框实用程序运行良好)。我猜测'Classes.WakeMainThread()'被调用的次数与Delphi 7中一样多,但发送WM_NULL到application.handle并没有实现任何效果。我想是时候“迈出步伐”了。
TThread.WaitFor()
并且主线程消息循环在处理完所有挂起的消息后进入空闲状态时,也会调用CheckSynchronize()
。 - Remy Lebeau