Windows下的线程终止

Windows下的线程可以通过以下4种方法来终止。

1、       线程函数返回。(强烈推荐)

2、       线程通过调用ExitThread函数“杀死”自己。(避免使用)

3、       同一个进程或另一个进程中的线程调用TerminateThread函数(避免使用)

4、       包含线程的进程终止运行(避免使用)

 

1)、线程函数返回(自然死亡)

清理工作包括:C++对象被析构函数正确销毁、线程栈正确释放、线程函数返回值被设置为退出代码、减少线程内核对象引用计数。

 

2)、通过调用ExitThread函数(做好部分后事的自杀)

清理工作除了不包括释放C/C++资源(调用C++对象的析构函数销毁)之外,同上。因此,要避免使用这一种方法。

 

3)、通过调用TerminateThread函数(无意识的自杀或者他杀,这是一种谋杀)

调用TerminateThread杀死线程,被终止运行的线程收不到它被“杀死”的通知(DLL_THREAD_DETACH通知)所以线程无法正确清理,而且不能阻止自己被终止运行。

清理工作除了不包括释放C/C++资源(调用C++对象的析构函数销毁),还有线程堆栈也不会销毁,除非包含该线程的进程终止,这样做的原因是为了让其他还在运行的线程要引用被“杀死”的那个线程的堆栈上的值。其余同上。因此,要避免使用这一种方法。

 

PS:以上总结绝大部分来来自《Windows核心编程 5th》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值