PostThreadMessage & SendMessage

PostThreadMessage & SendMessage

本文关键字:SendMessage PostThreadMessage      更新时间:2023-10-16

我有三个问题。

1。使用PostThreadMessage到CWinThread是安全的吗?

2。使用SendMessage(在两个应用程序之间)安全吗?

消息可以消失吗?SendMessage,PostThreadMessage的缺点是什么?我能发送的最大数量是多少?

3。终止CWinThread的最好方法是什么?

非常感谢!

使用PostThreadMessage到CWinThread是安全的吗?

如果消息没有传递或被拾取,在发布消息的线程不会受到伤害的情况下,这是安全的。当接收线程处于模态循环中时,发送到线程的消息会丢失(例如,显示模态对话框,在菜单中导航,或在调整大小操作期间)。

使用SendMessage(在两个应用程序之间)安全吗?

这通常是不安全的。如果目标应用程序无法检索传入消息,则发送应用程序也会挂起。使用SendMessageTimeout或SendNotifyMessage代替。

SendMessage的缺点是,它可能导致消息死锁。PostThreadMessage的缺点是消息可能会丢失(参见为什么由PostThreadMessage发布的消息会丢失?)。

每个消息队列最多可发布10,000条消息(参见PostMessage)。

杀死CWinThread的最好方法是什么?

杀死CWindThread的最佳方法是不杀死CWinThread。如果需要终止线程,请使用Event对象(或其他同步原语)向线程发出终止信号。这让线程有机会执行清理、释放全局资源等等。