1. 程式人生 > >一個解決迴圈內介面假死的方法

一個解決迴圈內介面假死的方法

 前段時間寫一個有進度條的單執行緒窗體程式時,碰到一個問題,即當進度條對應的的任務迴圈執行時,介面出現假死現象。具體表現為:程式介面沒有反映,或者說反映極慢。曾經試過用多執行緒來處理這個問題。但是處理執行緒裡面用迴圈來設定進度條進度位置,仍然導致介面無響應。到網上搜了一下,終於找到一種解決辦法。請參看以下程式碼:

/* -------------------------------------------------------------------------
Ok, call this to pump messages...
------------------------------------------------------------------------- */
void CDoeventsDlg::DoEvents()
{
MSG msg;
if (::PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { //從Windows訊息佇列中取出訊息
if (msg.message== WM_QUIT)//如果訊息為退出,傳送退出訊息
{
::PostQuitMessage(-1);
}
if(!AfxGetApp()->PreTranslateMessage(&msg))//如果無法預處理訊息
{
::TranslateMessage(&msg);//轉換訊息
::DispatchMessage(&msg);//傳送訊息
}
}
AfxGetApp()->OnIdle(0);AfxGetApp()->OnIdle(1);//訊息佇列為空時閒置一段時間
}

此段程式碼的作用就是處理一下介面的訊息,使介面執行緒能掌握一下控制權。經試驗,在
設定進度條進度位置後呼叫該函式後,能明顯改善介面的響應程度。
以上程式碼是從CSDN論壇中摘抄來的。其釋出者為:
KeSummer
!希望他不會告我侵權,呵呵!