为什么在Getmessage()之前需要使用peekMessage语句来创建消息队列?

有帮助吗?

解决方案

它不是必需的。

什么你有时会看到,虽然是一个线程没有准备好处理消息还没有,但希望能够得到他们的消息队列。新线程没有消息队列向右走,但调用PeekMessage足以创建消息队列。因为没有消息,并允许线程继续让自己准备立即返回。在此期间,其他线程可以开始新线程排队的消息。一旦新的线程准备,它调用GetMessage要么检索所述第一消息从队列,或等待要被放置到队列中的消息。

其他提示

这不是。这两个函数做不同的事情。

的PeekMessage(...)不等待出现一个消息 - 它获得的第一个,如果它的存在,任选地从队列中移除它为好,但返回false立即没有一个。这是在你做了一些处理,同时等待消息的应用越来越普遍,而不能只是坐在那里,永远等待下一条消息。实时游戏和这样容易就属于这一类。

的GetMessage(...)等待直到有一个消息,并得到它。这是更有效的CPUwise,因为它不是不断投票,但如果没有任何消息就会暂停。它多见于formy应用程序和不需要不断的实时处理其他程序是怎么回事。

使用的原因有多种 PeekMessage 之前/而不是 GetMessage:

  1. 确保程序不会挂起直到消息到达 - 这有点多余,因为你可以直接使用 PeekMessagePM_REMOVE 轮询消息队列并忽略的标志 GetMessage 共。
  2. 使用该函数 PM_NOREMOVE 并决定是否要处理消息和/或从队列中删除消息。
  3. 呼唤 IsWindowUnicode 在返回消息的窗口句柄上并选择 PeekMessageA 或者 PeekMessageW.
  4. 以上的倍数。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top