发布网友 发布时间:2022-04-29 13:56
共1个回答
热心网友 时间:2023-10-09 10:49
对于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.CPPvoid AFXAPI AfxEndThread(UINT nExitCode, BOOL bDelete){// remove current CWinThread object from memoryAFX_MODULE_THREAD_STATE* pState = AfxGetMoleThreadState();CWinThread* pThread = pState->m_pCurrentWinThread;if (pThread != NULL){ASSERT_VALID(pThread);ASSERT(pThread != AfxGetApp());// cleanup OLE if requiredif (pThread->m_lpfnOleTermOrFreeLib != NULL)(*pThread->m_lpfnOleTermOrFreeLib)(TRUE, FALSE);if (bDelete)pThread->Delete();pState->m_pCurrentWinThread = NULL;}// allow cleanup of any thread local objectsAfxTermThread();// allow C-runtime to cleanup, and exit the thread_endthreadex(nExitCode);} 从MFC代码中可以看出,AfxEndThread函数通过调用_endthreadex函数终止线程。此外,函数还进行释放线程的堆栈、删除线程对象等工作。