【发布时间】:2011-10-12 15:57:45
【问题描述】:
在 Delphi 2009 中,在 Delphi 7 中运行良好的同步函数执行速度非常慢,直到您将鼠标悬停在打开的表单上。摆动鼠标会导致程序进入某种鼠标空闲状态CheckSynchronize()。 CheckSynchronize() 在 Delphi 2009 中的调用频率似乎低于在 Delphi 7 中,但我们不知道为什么或在哪里。
放置此代码:
procedure TMyForm.FormCreate(Sender : TObject)
Classes.WakeMainThread := WakeMainThread;
end;
procedure TMyForm.WakeMainThread(Sender: TObject);
begin
SendMessage(Application.MainForm.Handle, WM_NULL, 0, 0);
end;
以正常速度加快速度。但是我得到:EAccessViolation in module rtl120.bpl 如果线程在模态应用程序中使用,则当线程死亡时(对于简单的对话框实用程序来说效果很好)。我猜 'Classes.WakeMainThread()' 的调用次数和 Delphi 7 中的一样多,但是将 WM_NULL 发送到 application.handle 并没有完成任何事情。我想是时候“踏踏实实”了。
【问题讨论】:
标签: multithreading delphi delphi-7 delphi-2009