线程输入队列

ebb*_*ebb 5 windows winapi

什么是“线程输入队列”?我在 MSDN 上多次看到它,并且不再怀疑它是否只是窗口的消息队列,是由他们所指的线程创建的,还是其他东西。

一个例子:

WH_MOUSE_LL 挂钩使您能够监视将要发布到线程输入队列中的鼠标输入事件。

Har*_*ton 2

首先,请注意窗口没有单独的消息队列;窗口的消息存放在相关线程的消息队列中。

根据MSDN,键盘和鼠标输入消息被发送到与相关窗口关联的线程的消息队列中。所以我相信“线程输入队列”只是“线程消息队列”的另一种说法。

编辑:雷蒙德指出(请参阅注释)可以使用 AttachThreadInput 函数将输入重定向到不同线程的消息队列。因此,“线程输入队列”意味着正在接收给定线程输入的消息队列;默认情况下这是同一个线程的消息队列,但也可以是不同线程的消息队列。

  • 如果您阅读文档,您将看到“GetMessage”和“PeekMessage”从消息队列和输入队列中检索消息。正如我已经指出的,大多数人不会明确谈论输入队列;他们只是谈论输入队列。他们在心理上将其与消息队列合并,即使它们在技术上是不同的东西。我厌倦了这种讨论,不再回复。 (5认同)
  • 每个线程都有一个消息队列。每个线程*组*都有一个输入队列。 (3认同)
  • 对于 16 位视图,请参阅 Bob Gunderson 的“GetMessage 和 PeekMessage 内部结构”。在Win16中,有一个系统范围的输入队列,但在Win32中,每个线程组都有自己的输入队列。(线程组是由 AttachThreadInput 函数创建的。您想知道该函数的用途,是吗?)另请参阅“每个 Win32 程序员应该知道的五件事”。 (2认同)