c++ - 邮寄消息 : Guaranteed to be delivered?

标签 c++ windows

在我的 C++ 应用程序中,我有一个执行某些工作的后台线程,将结果放入堆分配的内存块中,然后调用 PostMessage将结果传递给主线程。

通常,当 Window 收到消息时,它会处理结果,然后在 lParam 指定的内存上执行 delete

但我担心窗口可能会在处理消息和删除内存之前退出。

PostMessage 是否以某种方式保证目标窗口将有机会处理消息?
如果没有,是否有任何众所周知的技术可以知道 Window 是否释放了内存,或者后台线程是否需要负责删除它?

最佳答案

PostMessage肯定会放到接收窗口的消息队列中。但是,不能保证窗口会在那里。到那时它可能已经被摧毁了。 帮助确保消息到达那里的一种方法是创建您自己的隐藏窗口(COM 经常使用这种技术)并发布到它的队列。这样你就可以控制隐藏窗口何时被销毁。我们在实时数据传输中采用这种方法多年。

让后台线程删除内存是个坏主意,它会导致不知道何时可以删除的竞争条件。最好将其发布到您自己的窗口并在完成后将其删除。

关于c++ - 邮寄消息 : Guaranteed to be delivered?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18769111/

相关文章:

wpf - 防止点击通过 XAML/WPF 中的按钮

c++ - 强制 QBENCHMARK 执行多次迭代

c++ - CryptGenRandom 输出与 rand() 调用不同

C++异常裸抛

c++ - 为什么STL<set>的重载运算符<function必须是const函数?

c++ - 为什么不能直接在stream中使用按位运算符?

c++ - TerminateThread 在线程有无限循环时锁定

c++ - 如果什么都不做,请检查 Makefile

c++ - 创建一个非线程安全的 shared_ptr

ios - 我可以使用低功耗蓝牙连接 iOS 和 Windows 吗?