MFC 之多线程:最近使用 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;
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/02-27/17747824.html