MFC之多线程

来源:互联网 发布:逆战磁暴矩阵怎么用 编辑:程序博客网 时间:2024/04/30 09:28

最近使用MFC对项目进行可视化,开始学习MFC中的多线程,可能有理解错误的地方,以后会继续补充。

线程的声明:

CWinThread pThread;

类外回调函数,通过this传递类中的变量:

pThread = AfxBeginThread(ThreadVideoProc, this);

函数的的实现:

UINT ThreadVideoProc(PVOID pParm){    //通过pdlg指针控制类中的所有变量    MFCThreadTestDlg * pdlg = (CMFC_Faster_RcnnDlg*)pParm;    flag_xiancheng = false;    while (!flag_xiancheng)    {               //TODO...省略        return 0;    }}

检验线程是否结束成功:

HANDLE hThread;hThread = pThread->m_hThread;DWORD dwEvent = WaitForSingleObject(hThread, INFINITE);//无限等待//DWORD dwEvent = WaitForSingleObject(hThread, 5000);//等待5sswitch (dwEvent){case WAIT_OBJECT_0:    AfxMessageBox(TEXT("线程关闭成功"));    break;case WAIT_FAILED:    // Bad call to function (invalid handle?)    AfxMessageBox(TEXT("WAIT_FAILED"));    break;case WAIT_TIMEOUT:    // None of the objects became signaled within 5000 milliseconds.    AfxMessageBox(TEXT("超时!!!"));    break;}

通过全局变量flag_xiancheng来控制线程的结束,实验过程中发现,全局变量不能稳定的控制线程的结束,经常结束线程失败,解决方法:
volatile bool flag_xiancheng;

0 0