6.5.5 线程终止运行时发生的操作
当线程终止运行时,会发生下列操作:
• 线程拥有的所有用户对象均被释放。在Wi n d o w s中,大多数对象是由包含创建这些对象
的线程的进程拥有的。但是一个线程拥有两个用户对象,即窗口和挂钩。当线程终止运
行时,系统会自动撤消任何窗口,并且卸载线程创建的或安装的任何挂钩。其他对象只
有在拥有线程的进程终止运行时才被撤消。
• 线程的退出代码从S T I L L A C T I V E改为传递给E x i t T h r e a d或Te r m i n a t e T h r e a d的代码。
• 线程内核对象的状态变为已通知。
• 如果线程是进程中最后一个活动线程,系统也将进程视为已经终止运行。
• 线程内核对象的使用计数递减1。
当一个线程终止运行时,在与它相关联的线程内核对象的所有未结束的引用关闭之前,该
内核对象不会自动被释放。
一旦线程不再运行,系统中就没有别的线程能够处理该线程的句柄。然而别的线程可以调
用G e t E x i t c o d e T h r e a d来检查由h T h r e a d标识的线程是否已经终止运行。如果它已经终止运行,
则确定它的退出代码:
当线程终止运行时,会发生下列操作:
• 线程拥有的所有用户对象均被释放。在Wi n d o w s中,大多数对象是由包含创建这些对象
的线程的进程拥有的。但是一个线程拥有两个用户对象,即窗口和挂钩。当线程终止运
行时,系统会自动撤消任何窗口,并且卸载线程创建的或安装的任何挂钩。其他对象只
有在拥有线程的进程终止运行时才被撤消。
• 线程的退出代码从S T I L L A C T I V E改为传递给E x i t T h r e a d或Te r m i n a t e T h r e a d的代码。
• 线程内核对象的状态变为已通知。
• 如果线程是进程中最后一个活动线程,系统也将进程视为已经终止运行。
• 线程内核对象的使用计数递减1。
当一个线程终止运行时,在与它相关联的线程内核对象的所有未结束的引用关闭之前,该
内核对象不会自动被释放。
一旦线程不再运行,系统中就没有别的线程能够处理该线程的句柄。然而别的线程可以调
用G e t E x i t c o d e T h r e a d来检查由h T h r e a d标识的线程是否已经终止运行。如果它已经终止运行,
则确定它的退出代码: