PostMessage:保证交付?

abe*_*nky 9 c++ windows

在我的C++应用程序中,我有一个后台线程可以完成一些工作,将结果放入堆分配的内存块中,并调用PostMessage将结果传递给Main-Thread.

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

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

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

edt*_*guy 3

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

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