现在接手一个模块 里面有两个功能要求还没有解决 网上找了一下 也没有什么头绪,请各位大大帮忙看一下,谢谢
 问题1. 我现在有两个线程 A线程不停的向B线程 postthreadmessage 而B里的实现大致如下
        MSG msg;
        BOOL bRet;
        while ((bRet = GetMessage( &msg, NULL, 0, 0 )) != 0 ) 
        {
   if(msg.wParam ==XXXXX || msg.wParam == XXXXX)
::AfxMessageBox(XXX);         }  
         不明白的地方是:
             假如A线程发的第一个消息过来以后 进入::AfxMessageBox(XXX)后 我如果长时间不点掉这个MsgBox的话(A线程
         还在继续发消息),等点掉以后再次走到GetMessage这个地方时,A在刚才过程中发的其他消息全部都获取不到了,但
         是如果把AfxMessageBox(XXX)屏蔽掉的话 所有消息都是能得到的,我不清楚这是为什么,并且如何保证所有消息我
         都能获取到,因为我不能保证这个AfxMessageBox(或者是其他耗时较长的函数)什么时候返回,而且我也不能用线程
         来规避这个长时间的函数。
问题2.   我这个模块是在一个SDK中的,规定不能使用窗口 那么我如何获取到系统待机的消息呢?待机的系统broadcast似乎
         只给窗口发送了.
     新人没什么分,只有谢谢高手们了..很抱歉

解决方案 »

  1.   

    不明白的地方是:
      假如A线程发的第一个消息过来以后 进入::AfxMessageBox(XXX)后 我如果长时间不点掉这个MsgBox的话(A线程
      还在继续发消息),等点掉以后再次走到GetMessage这个地方时,A在刚才过程中发的其他消息全部都获取不到了,但
      是如果把AfxMessageBox(XXX)屏蔽掉的话 所有消息都是能得到的,我不清楚这是为什么,并且如何保证所有消息我
      都能获取到,因为我不能保证这个AfxMessageBox(或者是其他耗时较长的函数)什么时候返回,而且我也不能用线程
      来规避这个长时间的函数。
    ==========
    AfxMessageBox应该会弹出一个模态对话框,而模态对话框中是有消息循环的,所以发来的消息被对话框中的消息循环获得了,队列中没了,所以你的代码中的GetMessage就取不到了。如果用一个非模态对话框应该会避免这个问题。
      

  2.   

    问题2. 我这个模块是在一个SDK中的,规定不能使用窗口 那么我如何获取到系统待机的消息呢?待机的系统broadcast似乎
      只给窗口发送了.
    ========
    这里有个文章,可能对你有帮助:参考
      

  3.   

         感谢wltg2001的解答,但是第二个问题的文档我看了 也查过头文件 好像只能捕获个个别系统消息,正好没有待机\休眠 郁闷了 不过还是谢谢了