信號量 MFC線程同步控制問題

  目標:

WORK線程中運行到某處時觸發該 MsgWaitForMultipleObjects等待的hEventSerThrdWait

 

 

關鍵代碼:

 

主線程窗體中

   gPrintJobs[0] = m_hEventTestReceiver;
   gPrintJobs[1] = hEventSerThrdWait;

 

 

 dwWake = MsgWaitForMultipleObjects(
     gNumPrinting,
     gPrintJobs,
     FALSE,
     INFINITE,
     QS_ALLEVENTS);
    if (dwWake >= WAIT_OBJECT_0 && dwWake < WAIT_OBJECT_0 + gNumPrinting)
    {  

     }
    }
    else  //如果是其他的消息,則保持消息循環
    {
     if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
     {
      TRACE("/r/n");
      TRACE("PeekMessage");
      TRACE("/r/n");
      if(msg.message == WM_QUIT)
      {
      quit =TRUE;
      exitCode = msg.wParam;
      break;
      }
        TranslateMessage(&msg);
     DispatchMessage(&msg);
     }
    }  
   }

 

原做法是在從線程中聲明一全局變量,HANDLE hEventSerThrdWait;

然後主線程中extern HANDLE hEventSerThrdWait

從線程運行到該處時SetEvent(hEventSerThrdWait);

但是該做法行不通

 

改爲

從線程運行到該處時SendMessage,由從線程窗體事件響應函數中SetEvent(hEventSerThrdWait);即可激發MsgWaitForMultipleObjects返回,

不知道原因,思考中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章