线程中慎用SendMessage和PostMessage
Date: 2008-11-15 10:35:05
Category: MFC | Source: input8.com
MFC线程中慎用SendMessage和PostMessage
SendMessage和PostMessage的不同之处在于SendMessage会等待消息发送到达目的地并返回。
如果在线程中使用了SendMessage,在对话框主线程中发出了结束该线程的消息(比如SetEvent),然后WaitForSingleObject等待该线程退出。这时对话框线程已被阻塞在这里等待线程退出。同时,线程内由于使用了SendMessage也在等待主线程接收消息后返回。这时,两边都在等待,程序就“死锁”了,永远也退出不了了。
改进方法:如果可能,可以用PostMessage代替SendMessage。不过,PostMessage中传递字符串指针时要注意,一般在SendMessage中不出错,换到PostMessage中就出现内存错误了,那是因为SendMessage会等待消息返回,也就是目标线程收到消息时,该字符串仍存在。但是PostMessage就不一定了,可能目标线程收到消息时,字符串已经被销毁了。
Powered By Pig&Fish 1.0 CopyRight 2008, Input8's Blog