工控编程吧

标题: 上位机MFC如何等待线程结束 [打印本页]

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


程序退出时,等待线程结果
  1. <blockquote>void CGkbc8Dlg::OnClose()
复制代码
void ExitThread()
{
        if (g_pThread != NULL)
        {
                //等待线程结束
                ::WaitForSingleObject(g_pThread->m_hThread, INFINITE);
                delete g_pThread;
                g_pThread = NULL;
        }
}

例程源代码: (, 下载次数: 0)