【发布时间】:2012-08-28 23:04:46
【问题描述】:
有没有办法在多个线程之间共享一个消息队列,或者读取不同线程的消息队列,而不使用钩子?
【问题讨论】:
-
你说的是窗口消息,对吧?因为术语“消息队列”经常用于 MSMQ。
-
是的......但这几乎总是一个坏主意。你为什么不描述你想要做什么?
标签: multithreading winapi
有没有办法在多个线程之间共享一个消息队列,或者读取不同线程的消息队列,而不使用钩子?
【问题讨论】:
标签: multithreading winapi
GetMessage 和 PeekMessage 只读取当前线程的消息,不能使用它们读取发送到另一个线程拥有的输入队列的消息。
尝试使用AttachThreadInput 加入线程输入队列,这可能会奏效。
【讨论】:
消息队列中的消息可以根据它们所针对的窗口进行区分,但我认为消息不能根据 inteded 线程进行区分——MSG 中没有这些字段结构 - 所以我认为你不能在多个线程上共享一个队列。
这为您提供了一个非挂钩监控解决方案。
我很确定您可以查看另一个线程队列,但问题是您基本上是在轮询;所以你会错过消息。
您对要阅读的主题有任何影响吗?如果是这样,您可以让他们向您转播他们的消息。
除此之外,我看不出有什么办法。
【讨论】: