在线查询博客在线输入法火车查询IP查询手机归属地查询新华字典日历查询

线程中慎用SendMessage和PostMessage

Date: 2008-11-15 10:35:05
Category: MFC | Source: input8.com

Tags: SendMessage PostMessage WaitForSingleObject MFC 线程 内存错误

MFC线程中慎用SendMessage和PostMessage

SendMessagePostMessage的不同之处在于SendMessage会等待消息发送到达目的地并返回。
如果在线程中使用了SendMessage,在对话框主线程中发出了结束该线程的消息(比如SetEvent),然后WaitForSingleObject等待该线程退出。这时对话框线程已被阻塞在这里等待线程退出。同时,线程内由于使用了SendMessage也在等待主线程接收消息后返回。这时,两边都在等待,程序就“死锁”了,永远也退出不了了。

改进方法:如果可能,可以用PostMessage代替SendMessage。不过,PostMessage中传递字符串指针时要注意,一般在SendMessage中不出错,换到PostMessage中就出现内存错误了,那是因为SendMessage会等待消息返回,也就是目标线程收到消息时,该字符串仍存在。但是PostMessage就不一定了,可能目标线程收到消息时,字符串已经被销毁了。
Comments(0)
Username*
Email
Homepage
Content*