如何在主线程中执行不基于TThread的线程?

时间:2013-04-06 21:09:41

标签: delphi

例如,来自可执行文件或dll中CreateTimerQueueTimer的回调提供的线程?具有与主线程相同的线程ID是很重要的。

procedure TMyMainClass.ExecuteMe(someparam: paramtype);
begin
  {something}
end;

procedure TimerCallback(pvContext: pointer; fTimerOrWaitFired: boolean); stdcall;
begin
  {do what ?}
end;

Final update:
所有这些内容(TThread.SynchronizeTThread.QueuePostThreadMessage等)都可以通过消息进行操作。因此,请确保在等待回调时主持应用dll处理消息。

1 个答案:

答案 0 :(得分:7)

要在主线程中执行代码而不访问TThread实例,请调用类方法TThread.SynchronizeTThread.Queue

如果您碰巧使用的是没有这些方法的旧Delphi编译器,那么带有用户定义消息的SendMessagePostMessage是最简单的解决方案。