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

标签 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?

尽管这提供了一种解决方案,但我想提出一个问题。有推荐的替代方法吗?

最佳答案

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

关于multithreading - 如何在不创建Windows句柄的情况下将消息传递到TApartmentThread实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32322329/

相关文章:

python - 在 Windows 上,后台线程接收 zmq 消息失败

delphi - 如何使用变量运行 shellexecute?

c# - 使用 SystemParametersInfo SPI_GETICONTITLELOGFONT

delphi - Datasnap 与 SoapServer

c - 暂停线程?

python - 如何让 Python 的 multiprocessing Queue 的 .empty() 方法返回正确的值?还是替代品?

delphi - FindFirst 是否应该按字母顺序返回找到的文件?

string - 零前的Datasnap字符串参数被修剪为零

delphi - 协调错误: Has anyone had problems with truncated error messages?

java - 线程化数据集?