如何在不创建Windows句柄的情况下将消息传递给TApartmentThread实例

时间:2015-09-01 01:42:17

标签: multithreading delphi datasnap

我希望能够将来自DataSnap自动化服务器主应用程序的消息发布到为服务客户端创建的RemoteDataModule实例。

我从其他论坛中了解到,例如:

Delphi Multi-Threading Message Loop

可以在线程中处理消息,而无需为此目的创建Windows句柄;使用PostThreadMessage发布的消息。

然而,DataSnap TComponentFactory为每个RemoteDataModule创建一个TApartmentThread实例,它的Execute方法已处理消息:

    while GetMessage(msg, 0, 0, 0) do
    begin
      DispatchMessage(msg);
      Unk._AddRef;
      if Unk._Release = 1 then break;
    end;

我想让这个来处理我的任何自定义消息,意味着重写TApartmentThread Execute方法。

我已经确认创建一个窗口句柄来处理RemoteDataModule实例中的消息,可以使用此处描述的技术:

http://delphi.about.com/od/windowsshellapi/a/receive-windows-messages-in-custom-delphi-class-nonwindowed-control.htm

这使用了AllocateHWnd,由于其他人的工作,可以使其成为线程安全的:

How can I make AllocateHwnd threadsafe?

虽然这提出了一个解决方案,但我想问一下;是否有推荐的替代方法?

0 个答案:

没有答案