gpt4 book ai didi

c++ - 响应式地检查两个队列而不 Hook CPU

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:13 25 4
gpt4 key购买 nike

我有一个线程池系统,它使用消息传递来组织事件,我还使用 Windows API,它也进行一些消息传递。所以本质上我需要使用在不阻塞的情况下检查消息是否存在的函数。如果我在检查任一队列时阻塞(如果我使用 GetMessage 我认为它会阻塞),我可能会错过另一个队列上的任何传入消息。

我知道的第一个解决方案是在我查看两个队列的循环中的某个地方休眠几毫秒。

我能想到的另一种方法是有一个额外的线程,所以现在我正在收听的每个循环都有一个线程。我让它除了运行 windows 消息循环之外不负责做任何事情,然后用它来处理任何事件并将其转发到我自己的消息队列以供事件处理。但如果 Windows 专门将我感兴趣的消息发送到原始线程,这将不起作用。

还有其他好的解决方案吗?

最佳答案

您的要求有点不清楚,但我同意 Windows 消息队列很尴尬,因为只有一个线程可以等待它们。 Windows将窗口绑定(bind)到线程,只有创建窗口的线程才能与之交互。

如果您有用户定义的消息,其中包含要由您的线程池处理的工作,我建议您完全按照您在问题中的建议进行操作 - 使用一个线程来处理所有 Windows 消息,(GetMessage() 循环) ,重新排队出现在您的线程池输入队列中的所有工作,并使用通常的翻译/调度机制处理“正常”Windows 消息。

如果您需要更多帮助,您能否更清楚地描述 Windows 消息和/或工作对象在您的系统中的流动?线程池的工作从哪里来以及它是如何传输的并不明显,(如果被迫使用 WMQ,我通常在 wParam/lParam 中 postMessage 引用,但是你的系统?)。

Rgds,马丁

关于c++ - 响应式地检查两个队列而不 Hook CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6561520/

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