工控编程吧
标题: 上位机MFC如何等待线程结束 [打印本页]
作者: qq263946146 时间: 2019-8-4 11:00
标题: 上位机MFC如何等待线程结束
线程一般都是在主界面线程中创建,那么界面线程如何判断自身创建的工程线程完全退出呢?我们知道线程创建可以用函数AfxBeginThread。
函数会返回一线程指针,我们在程序退出时就可以调用另一函数WaitForSingleObject来等待线程的结果。
例如,我们通过按钮启动线程:
- void CGkbc8Dlg::OnButton1()
- {
- if (g_pThread != NULL)
- ExitThread();
- //启动线程,初始为挂起状态
- g_pThread = AfxBeginThread(ThreadProc, this, THREAD_PRIORITY_ABOVE_NORMAL);
- //线程结束时不自动撤销
- g_pThread->m_bAutoDelete = FALSE;
- }
复制代码 在线程函数里向编辑框写入数据:
- void CGkbc8Dlg::OnMsgFunc()
- {
- static int nIndex=0;
- nIndex++;
- SetDlgItemInt(IDC_EDIT1,nIndex);
- }
- CWinThread* g_pThread;
- UINT ThreadProc(LPVOID pParam)
- {
- //线程参数
- CGkbc8Dlg* pDlg = (CGkbc8Dlg*)pParam;
- for (int n = 0; n < 10; n++)
- {
- Sleep(100);
- //向主线程窗口发送消息
- pDlg->OnMsgFunc();
- }
- return 0;
- }
复制代码
程序退出时,等待线程结果
- <blockquote>void CGkbc8Dlg::OnClose()
复制代码void ExitThread()
{
if (g_pThread != NULL)
{
//等待线程结束
::WaitForSingleObject(g_pThread->m_hThread, INFINITE);
delete g_pThread;
g_pThread = NULL;
}
}
例程源代码:
(, 下载次数: 0)