我希望能够将数据从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/