windows多线程基础(3):如何正确结束线程

言归正传,线程创建后,如何终止呢?

若要终止线程的运行,可以使用下面的方法:
  • 线程函数返回(最好使用这种方法)
  • 通过调用ExitThread函数,线程将自行撤销(最好不要使用这种方法)
  • 通过调用TerminateThread函数(应该避免使用这种方法)
  • 包含线程的进程终止运行(应该避免使用这种方法)
1. 线程函数return
唯一能够确保所有的线程资源能被正确清除的唯一办法。
  • 线程中所有的C++对象均能通过各自的撤销函数正确的撤销
  • 释放线程的栈内存
  • 将线程的退出代码设置为线程函数的返回值
  • 线程内核对象的使用计数递减
2. ExitThread函数
强制线程终止进行。
  • 操作系统资源能够释放
  • C++资源将不被撤销(基于这个原因,最好从线程函数返回)
3. TerminateThread函数
竟然连线程的栈也不释放。以防其他线程对该线程堆栈数据有引用,若是撤销栈内存,其他线程会发生访问违规的问题。这样的话,其他线程仍然可以很好的继续运行。
4. 在进程终止运行时撤销线程
容器都没了,线程还能有么。

5. 线程终止运行时发生的操作
  • 线程拥有的所有用户对象均被释放
  • 线程的退出代码从STILL_ACTIVE被赋值
  • 线程的内核对象变为已通知
  • 线程的内核对象的使用计数被递减1
  • 如线程是最后一个活动线程,则进程将被终止

讲了这么多,貌似只用过return ExitCode的方法。

还是没提_beginthreadex函数,这个函数真的很有意思,学起来爱不释手,有种豁然开朗的感觉,不过还是明天继续吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值