知识点概述:
Windows不是实时操作系统,而是抢占式多线程操作系统
创建线程的内核对象之后,线程的暂停计数为1,此时不能被CPU调度,因为线程要初始化
初始化完成之后,会检查是否有挂起标志,有的话线程就暂停状态,没有则递减暂停计数为0,此时如果线程没有等待其他事情,就处于可调度的状态
除了CREATE_SUSPENDED标志外,还可以使用SuspendThread 暂停线程,并且可以暂停多次,最多暂停127次,MAXIMUM_SUSPEND_COUNT标志。递增暂停计数。此时如果想要恢复线程可调用状态,多次调用ResumThread递减暂停计数为0即可
进程不存在暂停或恢复,因为不会分配CPU时间
可以通过遍历进程的线程组来开关所有线程,但是存在隐患:因为此时仍然可以可以创建或撤销线程,所以之后的挂机或恢复操作就会有问题。比如获取到所有线程后还没有挂起时,此时创建了新的线程,此时将遗漏新建的线程,同理,获取后撤销了一个线程,会恢复不存在的线程等
由于线程可能被中断,所以计算运行时间时GetTickCount()就不准确
GetThreadTimes:线程执行操作系统代码和应用程序代码的CPU时间(100ms单位)
GetProcessTimes:所有线程执行内核代码和用户代码的时间总和(100ms单位)
高精度运行时间计算函数
QueryPerformanceFrequency
QueryPerformanceCounter
SetPriorityClass:改变进程的优先级类
SetThreadPriority:设置线程的相对优先级
激活或停用进程或线程的优先级提高功能
SetProcessPriorityBoost
SetThreadPriorityBoost
SetProcessAffinityMask:限制CPU子集上运行的单个进程中的线程数量
SetThreadAffinityMask:设置线程的亲缘性(线程能在哪个CPU上运行)
SetThreadIdealProcessor:为线程设置理想的CPU