C++编程:如何安全终止线程

http://www.itjxue.com  2015-07-17 00:54  来源:未知  点击次数: 

  对于Worker线程,终止线程可以使用线程的退出码作为返回值从线程函数返回。

  对于UI线程,因为有消息循环,需要发送一个WM_QUIT消息到线程的消息队列,当线程接收到WM_QUIT消息时退出消息循环。因此,结束线程可以在线程内部调用SDK的PostQuitMessage函数,发送WM_QUIT消息。

  PostQuitMessage函数的定义如下:

  void PostQuitMessage(int nExitCode);

  其中:

  nExitCode:线程的退出码。

  MFC还提供了AfxEndThread函数,Worker线程和UI线程都可以通过在线程内部调用AfxEndThread函数结束线程。

  AfxEndThread函数的定义如下:

  void AfxEndThread(UINT nExitCode, BOOL bDelete = TRUE);

  其中:

  nExitCode:线程的退出码。

  在MFC的THRDCORE.CPP中,AfxEndThread函数的相关代码如下:

  // THRDCORE.CPP

  void AFXAPI AfxEndThread(UINT nExitCode, BOOL bDelete)

  {

  // remove current CWinThread object from memory

  AFX_MODULE_THREAD_STATE* pState = AfxGetModuleThreadState();

  CWinThread* pThread = pState->m_pCurrentWinThread;

  if (pThread != NULL)

  {

  ASSERT_VALID(pThread);

  ASSERT(pThread != AfxGetApp());

  // cleanup OLE if required

  if (pThread->m_lpfnOleTermOrFreeLib != NULL)

  (*pThread->m_lpfnOleTermOrFreeLib)(TRUE, FALSE);

  if (bDelete)

  pThread->Delete();

  pState->m_pCurrentWinThread = NULL;

  }

  // allow cleanup of any thread local objects

  AfxTermThread();

  // allow C-runtime to cleanup, and exit the thread

  _endthreadex(nExitCode);

  }

(责任编辑:IT教学网)

更多

推荐计算机等级考试文章