gpt4 book ai didi

windows - 如何处理来自单独线程的窗口消息?

转载 作者:可可西里 更新时间:2023-11-01 13:22:25 25 4
gpt4 key购买 nike

我希望启动一个单独的线程来处理窗口消息(通过阻塞的 GetMessage 循环),但之后仍会在初始线程中创建窗口。

在单独的线程中,它一启动,我就用 PM_NOREMOVE 调用 PeekMessage 以确保存在消息队列(这是必需的吗?),然后是..

AttachThreadInput(initial thread id,GetCurrentThreadId(),true)

..在最终进入消息循环之前

我还没有使用互斥锁或 cs 来确保这会及时发生,但为了简单起见,我只是在我的初始线程中使用了一个 Sleep 语句。

无论如何,窗口消息似乎没有被单独的线程拦截。

我有点不确定我这样做是否正确,希望得到任何可能的指导。两个线程都在同一个进程中

谢谢大家

最佳答案

这不是 AttachThreadInput 所做的。即使在您将输入队列附加到另一个线程之后,Windows 仍然具有线程关联性。给定窗口队列中的消息只能由该窗口的线程从队列中删除。

AttachTheadInput 所做的是让两个线程共享一个输入队列。这允许他们查询有关输入状态的信息,并知道另一个线程将对相同的查询得到相同的答案。例如,一个线程可以调用 GetAsyncKeyState 并且知道答案反射(reflect)了另一个线程的键状态。

它允许两个或多个线程与输入队列以及彼此之间具有与 Windows 3x 中的进程相同的关系。这就是这个 API 存在的原因;以便复杂的多进程应用程序可以从 Win 3x 移植到 Win95/WinNT。

关于windows - 如何处理来自单独线程的窗口消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1964076/

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