PostThreadMessage & 发送消息

PostThreadMessage & SendMessage

我有三个问题。

1. 将PostThreadMessage 用于CWinThread 是否安全?

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

消息可以消失吗?SendMessage、PostThreadMessage 有什么缺点?我可以发送的最大数量有限制吗?

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

非常感谢!

Is this safe to use PostThreadMessage to CWinThread?

只要发布消息的线程不会受到伤害,万一消息未送达或未收到,这是安全的。当接收线程处于模态循环中时(例如,显示模态对话框、通过菜单导航或在调整大小操作期间),发布到线程的消息会丢失。

Is this safe to use SendMessage(Between two applications)?

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

SendMessage 的缺点是,它会导致 Message Deadlocks. The disadvantage of PostThreadMessage is, that messages may get lost (see Why do messages posted by PostThreadMessage disappear?)。

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

What is the best way to kill CWinThread?

杀死 CWindThread 的最好方法就是不杀死 CWinThread。如果您需要线程终止,请使用 Event object(或其他一些同步原语)来指示线程终止。这使线程有机会执行清理、释放全局资源等。