【问题标题】:win32: waitable event object for GUI messages?win32:GUI 消息的可等待事件对象?
【发布时间】:2013-06-14 08:40:49
【问题描述】:

是否可以创建一个在 GUI 消息可用时发出信号的事件对象,例如可以创建一个事件对象来表示套接字上存在数据?我们的想法是使用 WaitMultipleEvents 来处理 GUI 上发生的事情或到达 TCP/IP 套接字的请求。

如果这不是 QuickTime 应用程序,我会将整个客户端/服务器通信内容委托给后台线程(QuickTime 在多线程方面相当古怪,至少在 win32 上)。

顺便说一句,是否可以使用专用函数来执行移动/调整大小/重命名在另一个线程上创建的窗口之类的操作 - 还是需要明确发布消息?

【问题讨论】:

  • 您可以在 Windows 消息循环中执行此操作吗?这实际上就是等待 GUI 消息(以及其他消息)的内容。
  • 如果您不想通过向 GUI 输入队列发布消息来触发事件(一种合理的方法,如 @RogerRowland 建议的那样),您可以使用 MsgWaitForMultipleObjects() API 来运行你的 Windows 消息队列。

标签: multithreading winapi events object


【解决方案1】:

队列中的消息没有可等待对象,但有一个等待函数会等待队列中的可等待对象或消息。见MsgWaitForMultipleObjects。

【讨论】:

    【解决方案2】:

    没有这样的事件表明 Windows 消息可用。解决方案是以 Windows 消息而不是事件的形式获取套接字通知。 WSAAsyncSelect 在套接字中配置此模式。这让您可以使用消息循环在一个线程中获取 GUI 消息和套接字通知。

    【讨论】:

    • 是的,我知道 - 但使用该功能似乎是常识不。消息可能需要一些时间才能到达,过于繁重的通信可能会导致 GUI 无响应。不过,我不确定使用 MsgWaitForMultipleObjects 的方法在这方面有何不同。
    【解决方案3】:

    感谢您的回答。事实上,我在别处被提醒过 MsgWaitForMultipleObjects,并使用它 (code extract:)

    【讨论】:

    • 当阿德里安说了同样的话,你为什么要添加这个答案?你为什么不接受阿德里安的回答?
    猜你喜欢
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多