MFC或C#單按鈕結束while事件循環


在單線程應用中,我們知道,當程序進入某個需要長時間處理的函數A的時候,系統將不會響應用戶的各種操作包括關閉應用程序,程序將進入假死狀態,也就是界面停止響應其他操作。

 

關於C#可以直接在while循環里調用Application.DoEvents();

1 bool IsStart=false
2 
3 while(!IsStart)
4 {
5     //事件;
6     Application.DoEvents();
7 }
8 
9 //IsStart可在其他按鈕或同一按鈕下改變為true 即結束此循環

 

關於C++中MFC里做界面,也是我現在遇到的問題,可以如下解決:

1.同上面C#一樣,把Application.DoEvents(),換成C++中的:AfxGetApp()->PumpMessage();

2.創建一個DoEvent函數,同樣把C#例子中的替換掉就行了:

 1 //事件處理函數,鑲入到循環中,使得其它消息有機會得到處理
 2 
 3 BOOL DoEvents()
 4 {
 5     MSG msg;
 6     ::GetMessage(&msg,0,0, 0);
 7     if (msg.message == WM_QUIT) 
 8     {
 9          PostQuitMessage(msg.wParam);
10          return FALSE;
11     }
12     else
13     {
14          ::TranslateMessage(&msg);
15          ::DispatchMessage(&msg);
16          return TRUE;
17     }
18 }

在網上查了好多資料,基本都是創建一個DoEvent,今天偶然發現了方法1

分享出來給大家。如有錯誤還望指正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM