Pet*_*ner 3 delphi multithreading delphi-7 delphi-2009
在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;
Run Code Online (Sandbox Code Playgroud)
按正常速度加速.但我得到:EAccessViolation in module rtl120.bpl当线程在模态应用程序中使用时死亡(适用于简单的对话框实用程序).我猜测'Classes.WakeMainThread()'的调用与在Delphi 7中一样多,但是将WM_NULL发送到application.handle并没有完成任何事情.我想是时候'踩到'了.
该Synchronize()机制的内部在D7和D2009之间没有太大变化.当然,已经添加了新功能(异步排队,匿名方法等),但在主线程中运行代码的核心实现没有改变.更可能发生的是您的主线程代码中尚未显示的其他内容阻止主线程Synchronize()正确处理挂起的消息和请求.
| 归档时间: |
|
| 查看次数: |
1913 次 |
| 最近记录: |