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

来源:互联网 发布:linq实战源码 编辑:程序博客网 时间:2024/05/21 10:22
言归正传,线程创建后,如何终止呢?

若要终止线程的运行,可以使用下面的方法:
  • 线程函数返回(最好使用这种方法)
  • 通过调用ExitThread函数,线程将自行撤销(最好不要使用这种方法)
  • 通过调用TerminateThread函数(应该避免使用这种方法)
  • 包含线程的进程终止运行(应该避免使用这种方法)

1. 线程函数return

唯一能够确保所有的线程资源能被正确清除的唯一办法。
  • 线程中所有的C++对象均能通过各自的撤销函数正确的撤销
  • 释放线程的栈内存
  • 将线程的退出代码设置为线程函数的返回值
  • 线程内核对象的使用计数递减

2. ExitThread函数

强制线程终止进行。
  • 操作系统资源能够释放
  • C++资源将不被撤销(基于这个原因,最好从线程函数返回)

3. TerminateThread函数

竟然连线程的栈也不释放。以防其他线程对该线程堆栈数据有引用,若是撤销栈内存,其他线程会发生访问违规的问题。这样的话,其他线程仍然可以很好的继续运行。

4. 在进程终止运行时撤销线程

容器都没了,线程还能有么。

5. 线程终止运行时发生的操作

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

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

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

0 0
原创粉丝点击