新手,100分请教一个消息队列问题。公司一个已经离职的同事留下的源代码。...... //开一个线程,去做一些事情,做完把bFinished置TRUEwhile not bFinished do
    begin
        if (PeekMessage(lpMsg, 0, 0, 0, PM_REMOVE)) then
             begin
                 TranslateMessage(lpMsg);
                 DispatchMessage(lpMsg);
             end;
    end;......//做一些free动作,退出函数。
我大致知道PeekMessage是从消息队列里取一个消息,TranslateMessage是转化键盘消息,DispatchMessage是分发消息。但只是大致知道,还不够透彻。哪位高手能够分析得更详细一点:1.PeekMessage从消息队列里取一个消息,是操作系统有一个消息队列,还是每个程序都一个消息队列,dll和应用程序共用消息队列还是自己有消息队列?2.最后一个参数使用PM_REMOVE和PM_NOREMOVE有什么区别?什么情况下使用前者什么情况下使用后者?这是一个dll的导出函数,我把它换成PM_NOREMOVE会不会有什么不好的后果?3.我换成PM_NOREMOVE以后,做完事情到函数退出之间得时间变短了,这是为什么?

解决方案 »

  1.   

    消息队列是归线程所有,如果一个线程创建了窗口
    那么这个线程就有了消息队列
    当第一次用PeekMessage时,系统也会为该线程创建一个消息队列
    当用 PM_REMOVE是PeekMessage从消息队列取出消息并从消息队列中删除该消息
    PM_REMOVE是PeekMessage从消息队列取出消息但并不删除该消息
      

  2.   

    写错了
    PM_NOREMOVE是PeekMessage从消息队列取出消息但并不删除该消息
      

  3.   

    谢谢老达摩,请问不删除该消息会不会导致消息队列暴涨呢?或者导致其他后果?什么情况下该用PM_REMOVE,什么情况下该用PM_NOREMOVE? 谢谢!
      

  4.   

    不谢
    我也不怎么懂
    看看这个
    http://www.csdn.net/Develop/article/15%5C15000.shtm