【问题标题】:How to pass message to TApartmentThread Instance without creating Windows handle如何在不创建 Windows 句柄的情况下将消息传递给 TApartmentThread 实例
【发布时间】:2015-09-01 01:42:16
【问题描述】:

我希望能够将消息从 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?

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

【问题讨论】:

    标签: multithreading delphi datasnap


    【解决方案1】:

    看来,在 TApartmentThread 实例中处理自定义消息的唯一其他方法是重写 Execute 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多