一个线程有几个消息队列?
比如我
AfxBeginThread(func,0);func()
{
...
//产生对话框(可以是无模态的),这样的话有几条消息队列呢?是不是线程一条,对话框一条?
...
}

解决方案 »

  1.   

    一个线程一个消息队列,不是ui线程也有,所谓的UI线程和工作线程之分只是MFC的概念
      

  2.   

    哦,原来消息队列保存了不同的消息类型。
    在线程中有这样的处理
    func()
    {
       //无模态对话框创建
       //sendmessage给无模态对话框
       return ; //我return掉,对话框就无法处理消息了,是因为线程结束的原因吗?
    }
    有没有什么办法再让对话框处理消息呢?我用sleep循环不能成功,后来在return前加上peekmessage就可以了,这是怎么会事呢?谢谢指教。
      

  3.   

    每个线程都有,应该是一个,不然它怎么接受外面的消息?难道它堵塞在那里吗?比如,每个线程都可以响应TerminateThread函数,那就是说它们都有一个消息循环,我不理解的是UI线程和工作线程,它们的循环机制是不是同一个,希望高人回答.
      

  4.   

    对于Windows本身来说,好像不区分UI thread和worker thread。一般只要加上GetMessage、PostMessage、DispatchMessage等函数的循环,这个线程就拥有了消息处理能力。一个窗口的消息总是被发送到它所被创建时所在的线程中,如果线程提前推出,自然就不会接收到消息了。而且如果没记错的话,线程是无法响应TerminateThread函数的,操作系统会强行中止某线程的运行,此时被中止的线程不会得到任何提示。