工作线程里的消息循环中消息为什么不删除啊???

 const   UINT   WM_EVENT   =   WM_USER   +   1;  
   
  //消息循环  
  DWORD   WINAPI   ThreadMessageProc(LPVOID   lParam)    
  {  
  MSG   Msg;  
  while(true)    
  {  
  PeekMessage(   &Msg,   NULL,   0,   0,   PM_REMOVE);  
  switch(   Msg.message   )  
  {  
  case   WM_EVENT:  
  MessageBox(   NULL,   "1",   "1",   0);  
  break;  
  default:  
  ::TranslateMessage(&Msg);  
  ::DispatchMessage(&Msg);  
  break;  
  }  
  Sleep(100);  
  }    
  }    
   
   
  int   main()  
  {  
    DWORD   ThreadId;//创建的消息循环线程的线程号  
    CreateThread(   NULL,   0,   ThreadMessageProc,   NULL,   0,   &ThreadId);  
    PostThreadMessage(   ThreadId,   WM_EVENT,   NULL,   NULL   );  
    //……  
  }  

///////////////////////////////////////////////////////////

谁告诉你   PeekMessage(   &Msg,   NULL,   0,   0,   PM_REMOVE);   不删除消息的?  
   
  加了   PM_REMOVE   参数后就删除消息了,此时和   GetMessage   的不同在于是消息队列为空时   GetMessage   不会马上返回,而   PeekMessage   会立即返回。

/////////////////////////////////////////////////////////////

你这分明是UI线程嘛。建议用GetMessage,去掉Sleep,  
  case   WM_EVENT:  
  MessageBox(   NULL,   "1",   "1",   0);  
  break;  
  =>  
  case   WM_EVENT:  
  ::TranslateMessage(&Msg);  
  MessageBox(   NULL,   "1",   "1",   0);  
  break;  

你可能感兴趣的:(工作线程里的消息循环中消息为什么不删除啊???)