如何在不创建 Windows 句柄的情况下将消息传递给 TApartmentThread 实例
How to pass message to TApartmentThread Instance without creating Windows handle
我希望能够 post 从 DataSnap 自动化服务器的主应用程序发送消息到为服务客户端而创建的 RemoteDataModule 实例。
我是从其他论坛上了解到的,比如:
Delphi Multi-Threading Message Loop
可以在线程中处理消息,而无需为此目的创建 Windows 句柄;消息 post 使用 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 方法。
我已经确认创建 window 句柄来处理 RemoteDataModule 实例中的消息可以使用此处描述的技术:
这使用了 AllocateHWnd,由于其他人的工作,它可以成为线程安全的:
How can I make AllocateHwnd threadsafe?
虽然这提供了一个解决方案,但我想问一下;有推荐的替代方法吗?
似乎在 TApartmentThread 实例中处理自定义消息的唯一其他方法是重写 Execute 方法。
我希望能够 post 从 DataSnap 自动化服务器的主应用程序发送消息到为服务客户端而创建的 RemoteDataModule 实例。
我是从其他论坛上了解到的,比如:
Delphi Multi-Threading Message Loop
可以在线程中处理消息,而无需为此目的创建 Windows 句柄;消息 post 使用 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 方法。
我已经确认创建 window 句柄来处理 RemoteDataModule 实例中的消息可以使用此处描述的技术:
这使用了 AllocateHWnd,由于其他人的工作,它可以成为线程安全的:
How can I make AllocateHwnd threadsafe?
虽然这提供了一个解决方案,但我想问一下;有推荐的替代方法吗?
似乎在 TApartmentThread 实例中处理自定义消息的唯一其他方法是重写 Execute 方法。