工控编程吧

标题: 上位机MFC如何获得线程的退出码 [打印本页]

作者: qq263946146    时间: 2019-8-5 10:22
标题: 上位机MFC如何获得线程的退出码
线程函数退出时,会返回一个代码。
我们可以在函数内返回 不同的代码来判断线程执行情况。
如何获取线程返回代码?
可以直接使用函数GetExitCodeThread。
我们可以自己创建工程来测试,
可以事先从CWinThread派生两个类,
class CMyThread1 : public CWinThread这种形式。
在类初始化函数中起始退出线程,因为我们目的仅为测试。
  1. BOOL CMyThread1::InitInstance()
  2. {
  3.         //退出线程,退出码1000。
  4.         AfxEndThread(1000);
  5.         return TRUE;
  6. }
复制代码


然后就是这两个类的使用,我们定义变量,初始化。
        CMyThread1* m_pThread1;
        HANDLE m_hThread2;


然后就可以调用两个按钮来查看实现效果
  1. void CGkbc8Dlg::OnButton1()
  2. {
  3.         if (m_pThread1 != NULL)
  4.         {
  5.                 delete m_pThread1;
  6.                 m_pThread1 = NULL;
  7.         }

  8.         //启动线程 初始为挂起状态
  9.         m_pThread1 = (CMyThread1*)AfxBeginThread
  10.                 (RUNTIME_CLASS(CMyThread1),
  11.                 THREAD_PRIORITY_NORMAL,
  12.                 0,
  13.                 CREATE_SUSPENDED);

  14.         //线程结束时不自动撤销
  15.         m_pThread1->m_bAutoDelete = FALSE;

  16.         //恢复线程运行
  17.         m_pThread1->ResumeThread();       
  18. }
复制代码
  1. void CGkbc8Dlg::OnButton4()
  2. {
  3.         if (m_pThread1 == NULL)
  4.         {
  5.                 return;
  6.         }

  7.         DWORD dwExitCode = 0;

  8.         if (::GetExitCodeThread(m_pThread1->m_hThread, &dwExitCode))
  9.         {   
  10.                 if (dwExitCode == STILL_ACTIVE)
  11.                 {
  12.                         AfxMessageBox(_T("线程正在运行\n"));
  13.                 }
  14.                 else
  15.                 {
  16.                         CString strText = _T("");
  17.                         strText.Format("线程退出,退出码:%d\n", dwExitCode);
  18.                         AfxMessageBox(strText);
  19.                 }
  20.         }
  21. }
复制代码
同样类2的使用类似。
这里准备一个例程给大家下载学习。
(, 下载次数: 0)