新手,100分请教一个消息队列问题。公司一个已经离职的同事留下的源代码。...... //开一个线程,去做一些事情,做完把bFinished置TRUEwhile (!bFinished)
{
if (PeekMessage(lpMsg, 0, 0, 0, PM_REMOVE))
{
TranslateMessage(lpMsg);
DispatchMessage(lpMsg);
}
}......//做一些free动作,退出函数。
我大致知道PeekMessage是从消息队列里取一个消息,TranslateMessage是转化键盘消息,DispatchMessage是分发消息。但只是大致知道,还不够透彻。哪位高手能够分析得更详细一点:1.PeekMessage从消息队列里取一个消息,是操作系统有一个消息队列,还是每个程序都一个消息队列,dll和应用程序共用消息队列还是自己有消息队列?2.最后一个参数使用PM_REMOVE和PM_NOREMOVE有什么区别?什么情况下使用前者什么情况下使用后者?这是一个dll的导出函数,我把它换成PM_NOREMOVE会不会有什么不好的后果?3.我换成PM_NOREMOVE以后,做完事情到函数退出之间得时间变短了,这是为什么?回答任何一个问题都有分,非常感谢!
{
if (PeekMessage(lpMsg, 0, 0, 0, PM_REMOVE))
{
TranslateMessage(lpMsg);
DispatchMessage(lpMsg);
}
}......//做一些free动作,退出函数。
我大致知道PeekMessage是从消息队列里取一个消息,TranslateMessage是转化键盘消息,DispatchMessage是分发消息。但只是大致知道,还不够透彻。哪位高手能够分析得更详细一点:1.PeekMessage从消息队列里取一个消息,是操作系统有一个消息队列,还是每个程序都一个消息队列,dll和应用程序共用消息队列还是自己有消息队列?2.最后一个参数使用PM_REMOVE和PM_NOREMOVE有什么区别?什么情况下使用前者什么情况下使用后者?这是一个dll的导出函数,我把它换成PM_NOREMOVE会不会有什么不好的后果?3.我换成PM_NOREMOVE以后,做完事情到函数退出之间得时间变短了,这是为什么?回答任何一个问题都有分,非常感谢!
PM_NOREMOVE 不会把消息使用后删掉.PM_REMOVE则删除.
首先CreateEvent,然后WaitForSingleObject等待事件发生。当线程完成工作之后SetEvent。主线程等到事件之后或ResetEvet(如果还要利用该事件)或CloseHandle关闭Event(如果该事件已不再使用)
解决办法如楼上所讲