终止线程
四种方法:
- 线程函数返回(强烈推荐)。
- 线程通过调用 ExitThread “杀死”自己(避免使用)。
- 同一进程或另一进程中的线程调用 TerminateThread 函数(避免使用)。
- 包含线程的进程终止运行(避免使用)。
线程终止运行时的清理工作:
- 线程函数中创建的所有栈内对象都通过其析构函数被正确销毁。
- 操作系统正确释放线程栈使用的内存。
- 操作系统把线程的退出代码(在线程的内核对象中维护)设为线程函数的返回值。
- 系统递减线程的内核对象的使用计数。
线程终止运行时会发生的事情:
- 线程拥有的所有用户对象句柄会被释放(window 和 hook)。
- 线程的退出代码从
STILL_ACTIVE
变成传给 ExitThread 或 TerminateThread 的代码。 - 线程内核对象的状态变为触发状态。
- 如果线程是进程中的最后一个活动线程,系统认为进程也终止了。
- 线程内核对象的使用计数减一。
- 其关联的线程对象不会自动释放,除非对这个对象的所有未结束引用都被关闭。
参考
- 《Windows 核心编程》第五版