若何安全终止线程[网络技术]
本文“若何安全终止线程[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
根源:豆豆网
关于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);
}
从MFC代码中可以看出,AfxEndThread函数通过调用_endthreadex函数终止线程.此外,函数还举行释放线程的仓库、删除线程对象等工作.
假如在别的线程中终止该线程,必须采取线程通信的办法实现.此中一种简单的办法是成立一个变量,让线程监督该变量,当该变量为某个值时,则终止线程.
(1)成立1个基于对话框的利用程序,名称为Demo.
(2)在IDD_DEMO_DIALOG对话框资源中增添控件,如表所示.
范例
ID
标题
Static
IDC_STATIC
数据:
以上是“若何安全终止线程[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:mysql中show指令具体利用办法
- ·下一篇文章:删除卡巴斯基暂时文件拿回更多空间
- ·中查找“若何安全终止线程”更多相关内容
- ·中查找“若何安全终止线程”更多相关内容