我希望启动一个单独的线程来处理窗口消息(通过阻塞 GetMessage 循环),但之后仍然在初始线程中创建窗口。
在单独的线程中,一旦启动,我就会调用PeekMessage
使用 PM_NOREMOVE 确保消息队列存在(有必要吗?),然后..
AttachThreadInput(initial thread id,GetCurrentThreadId(),true)
..最终进入消息循环之前
我还没有使用互斥体或 cs 来确保这及时发生,但我只是使用Sleep
为了简单起见,我在最初的线程中声明了这一点。
无论如何,窗口消息似乎不会被单独的线程拦截。
我有点不确定我这样做是否正确,并且希望得到任何可能的指导。两个线程都在同一个进程中
谢谢你们
那不是什么AttachThreadInput
做。即使将输入队列附加到另一个线程后,Windows 仍然具有线程关联性。给定窗口的队列中的消息只能由该窗口的线程从队列中删除。
What AttachTheadInput
所做的就是让两个线程共享一个输入队列。这允许他们查询有关输入状态的信息,并知道另一个线程将针对同一查询获得相同的答案。例如,一个线程可以调用GetAsyncKeyState
并知道答案反映了另一个线程的关键状态。
它允许两个或多个线程与输入队列以及彼此之间具有与 Windows 3x 中的进程相同的关系。这就是这个 API 存在的原因;以便复杂的多进程应用程序可以从Win 3x 移植到Win95/WinNT。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)