我有一个线程,由主界面调用的COM创建,在这个线程里面向主界面发送两个消息,第一次一切正常,消息按照被发送的顺序到达主界面的消息处理函数,但是如果我在主界面重新这个过程,这时两个消息到达主界面的顺序就反了,造成主界面死锁,请问会有些什么原因会导致出现这种情况。
第一次发送:SendNotifyMessage(m_WinHandle, WM_THREADEVENT, (WPARAM)msg1, (LPARAM)msg);
第二次发送:SendNotifyMessage(m_WinHandle, WM_THREADEVENT, (WPARAM)msg2, (LPARAM)msg);
第一次发送:SendNotifyMessage(m_WinHandle, WM_THREADEVENT, (WPARAM)msg1, (LPARAM)msg);
第二次发送:SendNotifyMessage(m_WinHandle, WM_THREADEVENT, (WPARAM)msg2, (LPARAM)msg);
为何两个消息到达的消息反了就会死?得检查是否有同步的问题?
自己调试看就知道了啊, 在WaitXXX后加断点
SendNotifyMessage是个异步的消息函数,所以不能用来同步,您不防试试SendMessage()
我并不是要同步,只是要求消息的先后顺序不能变,难道说用SendNotifyMessage发消息,并不能确定消息的先后顺序?这种情况它应该进入消息队列呀
发一个消息给主界面,主界面响应函数里面WaitForSingleObject(要卡死就这样,不是卡死只是禁止某些操作就用变量控制),这样主界面就被卡死了,自己这个线程完成某些操作后SetEvent对主界面解锁。个人觉得这样更好些……