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;//终止
    }
}

 

posted @ 2019-11-28 13:06  夕西行  阅读(3686)  评论(0编辑  收藏  举报