MFC 工作者線程執行個體(圖)

來源:互聯網
上載者:User

        工作者線程一般用於後台複雜的計算,它沒有視窗介面,通常只是一些函數組成。下面是執行個體:

        關鍵知識:線程同步、線程建立。其中涉及到類 CEvent、函數AfxBeginThread, 函數WaitForSingleObject等

        步驟:1、建立基於對話方塊的應用程式,並在上添加相應控制項,1:

圖 1

                 2、建立後台函數,作為工作者線程的入口地址:

                       比如可以為項目添加一個新的檔案, 然後定義函數:

 

UINT BKThreadProc(LPVOID Param)
{
    CWorkerThreadDlg* WorkerThreadDlg=(CWorkerThreadDlg*)Param;
    ::WaitForSingleObject(WorkerThreadDlg->m_eStart,INFINITE);
    long total=0;
    CString result;
    WorkerThreadDlg->m_ctrlProgress.SetRange(0,WorkerThreadDlg->m_nMax);
    for (int i=0;i<=WorkerThreadDlg->m_nMax;i++)
    {
        WorkerThreadDlg->m_ctrlProgress.SetPos(i);
        Sleep(20);
        total+=i;
    }
    result.Format("%d",total);
    AfxMessageBox("結果為="+result);

    return 0;
}

                 3、在對話方塊類(即CWorkerThreadDlg類)中如下操作: 

新增成員變數(public):

CEvent m_eStart;        

CProgressCtrl m_ctrlProgress;

定義函數:即按鈕“開始運算”的事件函數

void CWorkerThreadDlg::OnBnClickedButton1()
{
    UpdateData(1);
    AfxBeginThread(BKThreadProc,this);
    m_eStart.SetEvent();  //同步通訊

}

定義函數:按鈕“使用說明”事件

void CWorkerThreadDlg::OnBnClickedButton3()
{
    AfxMessageBox("這個程式是利用工作者線程實現的。/n輸入一個數字後程式便在後台運行,這/n裡故意作了延時處理,同時顯示進度,所/n以您可以在下面的輸入框中動作。");
}

 

                 4、以上便是主要步驟,基本上就這些,關鍵是函數AfxBeginThread、WaitForSingleObject以事件同步類CEvent的使用。

                 運行效果如下:(在後台線程工作的同時可以操作主線程介面,如彈出說明等)

                  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.