我在主线程中创建工作线程,工作线程执行完毕后发送消息回主线程继续执行Update函数CWinThread *pThread=AfxBeginThread(DownLoadFile,0,THREAD_PRIORITY_NORMAL);
while(TRUE)
  {
  PeekMessage(msg,NULL,0,0,PM_REMOVE);
  if(msg->message==WM_MYQUIT)
                      {
                         Onquit();
         return 1;
                       }
  else
     {
                         update_=m_infodlg->UpdateFile();
                         return 0;
                       }
工作线程中用postthreadmessage(threadID,DOWNLOADFILE,0,0);
 
这个threadID 怎么得到?

解决方案 »

  1.   

    将线程ID使用参数传进去。
    CWinThread   *pThread=AfxBeginThread(DownLoadFile,threadID,THREAD_PRIORITY_NORMAL); 
      

  2.   

    在主线程中判断工作线程有没有结束啊` 如果是GUI线程,用MsgWaitForMultipleObjects,否则可以用WaitForSingleObject..
      

  3.   

    我没有在工作线程中发消息的时候return 0;返回刚debug了一下,return 0之后F10
    跑到
    threadWnd.Detach();
    --》 AfxEndThread(nResult);
    在这句时报出句提示:the thread 0x890 has exited with code 0;
    程序不能继续运行了,这是怎么回事?
    这时看到的threadWnd 的值是0
      

  4.   

    CWinThread   *pThread=AfxBeginThread(DownLoadFile,0,THREAD_PRIORITY_NORMAL); 
    while(TRUE) 
        { 
        PeekMessage(msg,NULL,0,0,PM_REMOVE); 
        if(msg-> message==WM_MYQUIT) 
            {
              Onquit(); 
              return   1; 
             } 
        else
            if(msg->message==DOWNLOADFILE)
              { 
                   update_=m_infodlg-> UpdateFile(); 
                   return   0; 
              } 我代码这点就这么写的,就是想工作线程把DOWNLOADFILE传到主线程而已
    在工作线程中
      用  ::PostMessage(AfxGetMainWnd()->GetSafeHwnd(),DOWNLOADFILE,0,NULL);传递消息,但是有问题,想用postthreadmessage(threadID,DOWNLOADFILE,0,0); 
    不会得到threadID
      
    这个threadID   怎么得到? 
      

  5.   

    你的主线程是UI线程吗? 处理消息不是你自己写吧? UI线程有自己的消息循环, 你这能取到消息?? 应当定义自定义消息, 然后写消息响应函数的..
    另外,用GetWindowThreadProcessId可以取得某个窗口的线程ID
      

  6.   

    我是取不到消息。我刚DEBUG检查了,那边发送消息发出去了,主线程没捉到T__T我还当他可以自己取消息呢,所以就没定义自定义消息。我去试试