我自己新建了一个线程,并且自定义了一个用户消息和消息响应函数,主线程每次执行到相应事件的时候就以PostThreadMessage的形式通知子线程执行,当主线程源源不断的给子线程发送消息的时候,子线程来得及执行吗?如果消息是放在子线程的消息队列中,子线程自己会取消息来执行吗?我需不需要在子线程中写让它取消息的代码?
谢谢各位!

解决方案 »

  1.   

    你子线程中当然要有消息循环了,不停getmessage处理
      

  2.   

    类似这样的
    PeekMessage(&msg,NULL,0,0,PM_REMOVE);
    while(GetMessage(&msg,NULL,0,0)) 
    {   
    switch(msg.message)   
    {   
    case  WM_CLOSE:
    return 0;
                    }
            }
      

  3.   

    应该在子线程的哪个位置加这段代码啊?我用的是MFC中的用户线程。。自己只添加了一个消息响应函数。。
      

  4.   

    奥,你用MFC类做的?
    那就需要注册消息循环就成了
      

  5.   

    应该就是和对话框之类的MFC类一样
    在头文件中加DECLARE_MESSAGE_MAP()
    然后cpp中加
    BEGIN_MESSAGE_MAP(CXXwin, CDialog)
    //中间处理消息
    END_MESSAGE_MAP()
      

  6.   

    光有消息循环还不行吧,PostThreadMessage不太熟,可以考虑在线程中建立一个窗口以接收消息,再建立消息循环,和响应函数。
      

  7.   

    子线程来得及执行吗?
    如果发消息太快,肯定是来不及的。postthreadmessage在msdn上的描述就是可能会丢失消息。
    下面的我想就不用回答了,还是换个思路吧
      

  8.   

    加了应该就可以接收消息了,你是继承自CWinThread吧?
      

  9.   

    对,postthreadmessage是有可能丢,所以我加了一段代码:
    while(!m_pHandleThread->PostThreadMessage(WM_HANDLE,(WPARAM)&Info,NULL)
    {
          Sleep(10);
    }就是一定要Post成功,这样应该行吧?
      

  10.   

    PostMessage可能丢失消息,可以试下SendMessage(),不过这个函数要等消息处理处理以后才能返回,响应上有影响
      

  11.   

    xuexixuexi  !!!!!!!!!!!!!!!11