CWinThread :: PumpMessage的功能

时间:2015-05-22 03:47:47

标签: c++ multithreading

当我调试由C ++开发的Windows应用程序时,我发现这个函数调用CWinThread::PumpMessage()。 我已阅读MSDN以及其他一些论坛帖子以便了解。但我仍然不确定它的作用。

是否有人可以帮助解释此功能的可用性。

1 个答案:

答案 0 :(得分:4)

这是一个方便的功能,可防止窗口锁定。它在MFC应用程序中的用法如下:

void PumpWaitingMessages(){
   MSG msg; 
   while (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)){
      if (!AfxGetThread()->PumpMessage()) 
         return;
   }
}

例如,在对话框中考虑此功能:

void CMyDialog::OnOK(){
       for (int i = 0; i < 50; i++){
          PumpWaitingMessages();
          Sleep(100);
          //do some lengthy calculations
       }
       MessageBox("done");
       CDialog::OnOK();
    }

如果你调用上面的函数,程序应该锁定线程5秒钟。但是PumpWaitingMessages();将允许程序响应键盘和鼠标输入。但是因为例如如果连续两次单击“确定”按钮,程序将关闭对话框两次......