Basis - 线程

终止线程

四种方法:

  1. 线程函数返回(强烈推荐)。
  2. 线程通过调用 ExitThread “杀死”自己(避免使用)。
  3. 同一进程或另一进程中的线程调用 TerminateThread 函数(避免使用)。
  4. 包含线程的进程终止运行(避免使用)。

线程终止运行时的清理工作:

  • 线程函数中创建的所有栈内对象都通过其析构函数被正确销毁。
  • 操作系统正确释放线程栈使用的内存。
  • 操作系统把线程的退出代码(在线程的内核对象中维护)设为线程函数的返回值。
  • 系统递减线程的内核对象的使用计数。

线程终止运行时会发生的事情:

  • 线程拥有的所有用户对象句柄会被释放(window 和 hook)。
  • 线程的退出代码从 STILL_ACTIVE 变成传给 ExitThread 或 TerminateThread 的代码。
  • 线程内核对象的状态变为触发状态。
  • 如果线程是进程中的最后一个活动线程,系统认为进程也终止了。
  • 线程内核对象的使用计数减一。
  • 其关联的线程对象不会自动释放,除非对这个对象的所有未结束引用都被关闭。

参考

  • 《Windows 核心编程》第五版

文档信息

Search

    Table of Contents