WM_の使用QUIT終端スレッド


スレッド1の関数を次に示します. 

  
  
  
  
  1. ThreadFun1  
  2. {  
  3. ....// A  
  4. while (::GetMessage(&msg, NULL, 0, 0))  
  5. {  
  6.   if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))  
  7.   {  
  8.     TranslateMessage(&msg);  
  9.     DispatchMessage(&msg);  
  10.   }  
  11. ...//B

スレッド1関数にメッセージループがあり、スレッド2でスレッド1を終了させたいと考えているが、スレッド2を自然に終了させるために、ここではスレッド1にメッセージWM_を配信するQUIT,::PostThreadMessage(dwThreadID1, WM_QUIT, 0, 0); ThreadFun 1のメッセージループでGetMessageがWM_を受信するとQUITは、ループを終了します.では、このようにするのは何か問題がありますか?
  スレッド1がメッセージキューを持つ前にWM_を送信する場合QUITでは、メッセージが失われます.つまり、ThreadFun 1がGDI関数を実行する前に(スレッドがGDI関数を実行すると、OSはスレッドにメッセージキューを作成する)、そのスレッドにメッセージを配信すると、ThreadFun 1のメッセージループはそのメッセージを受信できない.この問題をどのように解決しますか?
  ThreadFun 1の一番前に:MSG msg;:PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE); これにより、スレッド1がメッセージサイクル中にWM_を受信できることが保証されるQUITメッセージ.