【Windows核心编程笔记】第七章 线程的调度、优先级和亲缘性

知识点概述:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值