作者:shenzi
链接:http://blog.csdn.net/shenzi
Windows核心编程:线程调度
1.线程的挂起和恢复
在线程的内核对象 中 有一个值表示线程的挂起计数。调用CreateProcess或者CreateThread时,系统将创建线程内核对象,并把挂起计数初始化为1。这样, 就不会给这个线程调度CPU了。这正是我们所希望的,因为线程初始化需要时间,我们当然不想在线程准备好之前就开始执行它。
在线程初始化之后,CreateProcess或者CreateThread函数将查看是否有CREATE_SUSPENDED标志传入。如果有,函数返 回并让新的线程处于挂起状态。如果没有,函数会将线程的挂起计数递减为0.当线程的挂起计数为0时,线程就成为可调度的了,除非它还在等待某个时间发生 (如键盘输入)
在线程的内核对象 中 有一个值表示线程的挂起计数。调用CreateProcess或者CreateThread时,系统将创建线程内核对象,并把挂起计数初始化为1。这样, 就不会给这个线程调度CPU了。这正是我们所希望的,因为线程初始化需要时间,我们当然不想在线程准备好之前就开始执行它。
在线程初始化之后,CreateProcess或者CreateThread函数将查看是否有CREATE_SUSPENDED标志传入。如果有,函数返 回并让新的线程处于挂起状态。如果没有,函数会将线程的挂起计数递减为0.当线程的挂起计数为0时,线程就成为可调度的了,除非它还在等待某个时间发生 (如键盘输入)