【问题标题】:Amount of events queued up? (Win32 event queue)排队的事件数量? (Win32 事件队列)
【发布时间】:2012-07-10 11:55:25
【问题描述】:

我正在为一个事件循环类实现一个跨平台的“completePending”函数,该函数应该只解析队列中的 n 个事件。 (n 在函数开始时被抓取,并且只解析 n 个事件。)

所以我悠闲地漫步在日落中,却发现自己在 msdn 中,正在寻找 XEventsQueued() DWORD WINAPI WinQueuedEvents(__in_opt DWORD)。但我似乎找不到一个。我开始怀疑win32 api中是否存在这样的功能!因此,我来​​到了堆栈溢出来寻找答案的编码人员的奇妙住所。

据我所知 GetMessage() 会阻塞,直到收到消息。因此,如果没有 GetPending(),我应该在有消息时偷看并获取不是很好的替代方案?

【问题讨论】:

  • 我在XQueuedEvents 上找不到任何文档。这是正确的拼写吗?
  • 我试图通过展示我出色的 X11/Xlib 知识(unix'es)来搞笑
  • 是的,我知道您要求的 Windows 与您从 X11 知道的某些功能等效。所以我想看看这个函数到底是做什么的……但找不到。
  • 哇,当你搜索 XQueuedEvents 时,谷歌搜索已经找到了这个页面......呵呵,我可能记不住了。
  • 其实是XEventsQueued呵呵

标签: c++ c windows winapi


【解决方案1】:

在您收到(仅)一条 Windows 消息之前不会阻塞的功能包括:

  • PeekMessage
  • MsgWaitForMultipleObjects
  • MsgWaitForMultipleObjectsEx

请注意,您可以将PM_REMOVE 传递给PeekMessage 以获得非阻塞GetMessage

另外请注意,这些函数不会返回已发送的消息,而是会立即分派它们。

【讨论】:

  • 你的答案会扩大吗?我很好奇。这就像 3.5 行/1 分钟的扩展!我猜windows中没有'getpending'功能。所以是的,我会做 PeekMessage + GetMessage 然后。
  • @Eximius:如果你使用PM_REMOVE,你不需要在PeekMessage之后调用GetMessage
  • 是的,我的答案会扩展得更多,除了 MSDN 的 PeekMessage 页面不会加载。他们的服务器上的问题。我正在检查两者的发送消息的行为是否相同。
猜你喜欢
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
相关资源
最近更新 更多