gpt4 book ai didi

multithreading - 直接从线程向对象发送消息,而不使用主窗体

转载 作者:行者123 更新时间:2023-12-03 15:49:04 26 4
gpt4 key购买 nike

我正在使用一个使用大量线程的第三方库。

我刚刚开始使用消息从线程与主线程进行通信。一切正常,但是使用我下面描述的方式使用 SendMessage 似乎很麻烦,因为主窗体必须分派(dispatch)所有消息。有没有一种方法可以直接将消息发送到框架或对象,而不依赖于主要形式?

程序启动时:

 MyMessageNumber1 :=  RegisterWindowMessage('MyUniqueID1');
MyMessageNumber2 := RegisterWindowMessage('MyUniqueID2');

当发送没有任何数据的消息时,我会:

 SendMessage(Application.MainForm.Handle,  MyMessageNumber1) 

我的主表单有这个:

procedure WndProc(var Message: TMessage); override;
if (Message.Msg = MyMessageNumber1)
... call a frame or other object's method that handles this particular message
else if (Message.Msg = MyMessageNumber2) then
... call another ....
else
inherited;

总之:上面的 WndProc 必须了解的所有消息以及将消息分派(dispatch)给谁的信息远远超出了我的预期。

如何以任何对象都可以接收的方式直接从线程发送消息?

所有这些消息都没有与之关联的数据。 (我们改天再讨论这个问题!):-)

TIA

最佳答案

是的,你可以。您可以使用 AllocateHWND 在任何对象中分配窗口句柄。该句柄可用于向其发送消息。

但是你的问题可能出在SendMessage上。如果您使用 PostMessage 而不是 SendMessage,调用将立即返回。 PostMessage 不会等待消息被处理。因此,如果您不需要消息结果,也不需要发送对线程数据的引用,则可以只使用 PostMessage。

关于multithreading - 直接从线程向对象发送消息,而不使用主窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4309259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com