VC下线程安全退出的方法----百度文章
来源:互联网 发布:js中join的用法 编辑:程序博客网 时间:2024/06/05 12:40
原文地址::http://wenku.baidu.com/link?url=9Ab59gzee2LZYGZrwx74i2-wOp5KRNgHFY2-SvCt8_3TV0jJTIUXif_nFi-Qfm0wqorlK2vFVp26ITbbcvvOAEmT8XIxl6EmtyVFrVzQ0AC
相关文章
1、线程安全退出【转载】----http://wsyjwps1983.blog.163.com/blog/static/6800900120122155112865/
若要终止线程的运行,可以使用下面的方法:
1.线程函数返回(最好使用这种方法)。
2.通过调用ExitThread函数,线程将自行撤消(最好不要使用这种方法)。
3.同一个进程或另一个进程中的线程调用TerminateThread函数(应该避免使用这种方法)。
4.包含线程的进程终止运行,(应该避免使用这种方法)。
如果使用方法1,就可以确保下列事项的实现:
1.在线程函数中创建的所有C + +对象均将通过它们的撤消函数正确地撤消。
2.操作系统将正确地释放线程堆栈使用的内存。
3.系统将线程的退出代码(在线程的内核对象中维护)设置为线程函数的返回值。
4.系统将递减线程内核对象的使用计数。
示例:源代码中threadtest中。
UINT ThreadProc(LPVOID pParam)
{
TRACE("ThreadProc:in ...\n");
while(1)
{
if(WaitForSingleObject(g_exitevent.m_hObject, 0) == WAIT_OBJECT_0)
{
break;
}
Sleep(1000);
}
TRACE("ThreadProc:exit ...\n");
return 100; //这个值可以用GetExitCodeThread获得
}
BOOL CThreadtestDlg::StopThread()
{
if (m_pThread == NULL)
{
TRACE("StopThread:thread already exit...\n");
return FALSE;
}
g_exitevent.SetEvent();
//等待线程结束,只等待2秒,
int nTimes=100;
while(1)
{
DWORD dwExitCode;
// 检索线程的退出代码前要求线程对象还没有退出
//如果m_pThread->m_bAutoDelete没有设置成FALSE,就不能获得dwExitCode
//并且GetExitCodeThread会返回FALSE
::GetExitCodeThread(m_pThread->m_hThread, &dwExitCode);
if( dwExitCode != STILL_ACTIVE)
{
TRACE("StopThread:thread exitcode %d...\n",dwExitCode);
break;
}
if(nTimes--==0)
{
TRACE("StopThread:stop thread error...\n");
TerminateThread(m_pThread->m_hThread,0); //强行结束,不推荐
break;
}
Sleep(20);
}
delete m_pThread; //因为m_pThread->m_bAutoDelete=FALSE,所以要自行删除线程对象
m_pThread = NULL;
return TRUE;
}
void CThreadtestDlg::OnOK()
{
// TODO: Add extra validation here
//启动线程,初始为挂起状态,类成员变量 CWinThread* m_pThread
m_pThread = AfxBeginThread(ThreadProc, NULL ,THREAD_PRIORITY_ABOVE_NORMAL, 0, CREATE_SUSPENDED);
//线程结束时不自动删除
m_pThread->m_bAutoDelete = FALSE;
//恢复线程运行
m_pThread->ResumeThread();
}
//=========================================================================================================
备注::
1》最好使用这种方法----线程函数返回
2》可以去等待一个线程的句柄的有无状态来决定一个线程是否真的退出
- VC下线程安全退出的方法----百度文章
- VC线程安全退出的方法
- 【线程退出】:VC线程安全退出的方法
- VC退出线程的方法
- 安全退出线程方法
- 线程的安全退出
- VC线程的退出检测
- Linux下如何安全退出线程
- 24.VC(custom)-辅助线程安全退出( 双Event)
- FreeLibraryAndExitThread DLL中线程的安全退出
- FreeLibraryAndExitThread DLL中线程的安全退出
- FreeLibraryAndExitThread DLL中线程的安全退出
- [java多线程]如何安全的退出线程
- 保证线程退出的方法
- MFC 线程的退出方法
- 线程安装退出的方法
- 关于线程安全退出
- 关于线程安全退出
- Windows XP + Apache 2.2.4 + PHP 5.2.3 + MySQL 5.0.27 + Zend Optimizer 3.3.0 Windows XP + Apache + PH
- cppTest-3.0:指针相关-4(字符串函数)
- asp.net mvc 3.0详细笔记__05__项目文件结构详解_Views
- cppTest-3.0:指针相关-x(指针运算)
- [LeetCode]Valid Parentheses
- VC下线程安全退出的方法----百度文章
- Linux驱动开发经典书籍
- 现控-控制系统的状态空间描述
- asp.net mvc 3.0详细笔记__06__项目文件结构详解_Content和Scripts
- Memcached笔记——(二)应对高并发攻击
- android中图片的三级cache策略(内存、文件、网络) 一
- 李强东经典演讲回忆录
- cppTest-3.5:模板函数
- asp.net mvc 3.0详细笔记__07__项目文件结构详解_Global.asax