【问题标题】:C - WinAPI - send message to thread and wait for itC - WinAPI - 向线程发送消息并等待它
【发布时间】:2014-07-21 20:34:53
【问题描述】:

我想在 WinAPI 中向窗口发送一条消息,在其他线程中创建,然后等待处理这条消息。

这可能吗?提前致谢。

【问题讨论】:

    标签: c multithreading winapi process message


    【解决方案1】:

    使用SendMessage() 向窗口发送消息。

    SendMessage() 阻塞调用线程,直到消息被传递由目标窗口的消息调度程序处理。

    来自SendMessage()'s documentation

    将指定的消息发送到一个或多个窗口。 SendMessage 函数调用指定窗口的窗口过程,直到窗口过程处理完消息才返回。

    【讨论】:

    • 这种方法可能会造成死锁...也许使用PostMessage 并使用自定义消息与GUI 进行通信更安全...只是一个想法...
    • @AlwaysLearningNewStuff 也许SendMessageTimeout 可能更可取?不过,鉴于 OP 的要求,我会直接选择 SendMessage
    • @EricBrown:在线程函数中创建窗口是有风险的。主线程应该是唯一拥有 GUI 的,并且线程函数应该创建窗口/直接访问 GUI 元素。当线程和 GUI 需要通信时,它们通常 发布(而不是发送) 自定义消息,以防止死锁。还使用了其他同步方式,例如Event ObjectsMutexesCritical sections 等。不过,我没有那么有经验,可能缺少一些东西。 OPs 的问题不是很清楚,但我认为他会被他的方法烧死......
    • @AlwaysLearningNewStuff 仅消息 hwnd 对于应用内跨线程通信非常方便。
    • @EricBrown:不知道。这对我来说似乎很棘手,这就是为什么我会回避它。也许我会在业余时间尝试一下,看看效果如何(它可能会非常方便)。最好的问候。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2013-05-31
    相关资源
    最近更新 更多