MFC或C#單按鈕結束while事件迴圈

來源:互聯網
上載者:User

標籤:網上   post   狀態   響應   其他   star   ==   包括   迴圈   

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

 

關於C#可以直接在while迴圈裡調用Application.DoEvents();

1 bool IsStart=false2 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     else13     {14          ::TranslateMessage(&msg);15          ::DispatchMessage(&msg);16          return TRUE;17     }18 }

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

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

MFC或C#單按鈕結束while事件迴圈

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.