MFC 線程啟動、暫停、繼續、終止


CWinThread* p_myThread;//創建線程指針
BOOL flag_myThread = FALSE;//是否終止

//頭文件中聲明(放類內) static UINT MyThreadFunction(LPVOID pParam);//定義線程入口函數
UINT CMFCApplication25Dlg::MyThreadFunction(LPVOID pParam) //線程入口函數,具體實現
{
    CMFCApplication25Dlg* dlg = (CMFCApplication25Dlg*)pParam;
    for (int i = 0; i <= 100; i++)
    {
        if (flag_myThread) break;

        dlg->SetDlgItemInt(IDC_STATIC, i, false);
        Sleep(100);
    }
    p_myThread = NULL;//線程結束注銷或線程不存在
    return 0;
}
void CMFCApplication25Dlg::OnBnClickedButton1()
{
    // TODO:  在此添加控件通知處理程序代碼
    if (p_myThread==NULL) //若無線程啟動成功
    {    //創建並啟動線程
        p_myThread = AfxBeginThread(MyThreadFunction, (LPVOID)this);//this賦給線程入口函數的參數pParam
        flag_myThread = FALSE;
    }
    else
    {
        AfxMessageBox(_T("線程已經啟動"));
    }    
}


void CMFCApplication25Dlg::OnBnClickedButton2()
{
    // TODO:  在此添加控件通知處理程序代碼
    if (p_myThread == NULL)//若無線程啟動成功
    {
        AfxMessageBox(_T("線程不存在"));
    }
    else
    {
        p_myThread->SuspendThread();//暫停、掛起
    }
}


void CMFCApplication25Dlg::OnBnClickedButton3()
{
    // TODO:  在此添加控件通知處理程序代碼
    if (p_myThread == NULL)//若無線程啟動成功
    {
        AfxMessageBox(_T("線程不存在"));
    }
    else
    {
        p_myThread->ResumeThread();//繼續
    }
}


void CMFCApplication25Dlg::OnBnClickedButton4()
{
    // TODO:  在此添加控件通知處理程序代碼
    if (p_myThread == NULL)//若無線程啟動成功
    {
        AfxMessageBox(_T("線程不存在"));
    }
    else
    {
        flag_myThread = TRUE;//終止
    }
}

 


免責聲明!

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



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