言归正传,线程创建后,如何终止呢?
若要终止线程的运行,可以使用下面的方法:
- 线程函数返回(最好使用这种方法)
- 通过调用ExitThread函数,线程将自行撤销(最好不要使用这种方法)
- 通过调用TerminateThread函数(应该避免使用这种方法)
- 包含线程的进程终止运行(应该避免使用这种方法)
1. 线程函数return
唯一能够确保所有的线程资源能被正确清除的唯一办法。
- 线程中所有的C++对象均能通过各自的撤销函数正确的撤销
- 释放线程的栈内存
- 将线程的退出代码设置为线程函数的返回值
- 线程内核对象的使用计数递减
2. ExitThread函数
强制线程终止进行。
- 操作系统资源能够释放
- C++资源将不被撤销(基于这个原因,最好从线程函数返回)
3. TerminateThread函数
竟然连线程的栈也不释放。以防其他线程对该线程堆栈数据有引用,若是撤销栈内存,其他线程会发生访问违规的问题。这样的话,其他线程仍然可以很好的继续运行。
4. 在进程终止运行时撤销线程
容器都没了,线程还能有么。
5. 线程终止运行时发生的操作
- 线程拥有的所有用户对象均被释放
- 线程的退出代码从STILL_ACTIVE被赋值
- 线程的内核对象变为已通知
- 线程的内核对象的使用计数被递减1
- 如线程是最后一个活动线程,则进程将被终止
讲了这么多,貌似只用过return ExitCode的方法。
还是没提_beginthreadex函数,这个函数真的很有意思,学起来爱不释手,有种豁然开朗的感觉,不过还是明天继续吧。
1250

被折叠的 条评论
为什么被折叠?



