C7、线程的调度、优先级、亲缘性

一、暂停线程的运行:

a)         创建时使用CREATE_SUSPENDED

b)        DWORD SuspendThread(HANDLE hThread);

二、恢复执行(唤醒):DWORD ResumeThread(HANDLE hThread);

三、线程睡眠:VOID Sleep(DWORD dwMilliseconds);

四、转换到其他线程:BOOL SwitchToThread()

五、线程的运行时间:

a)         使用两个GetTickCount()计算时间差不可取;

b)        BOOL GetThreadTimes(

HANDLE hThread,

PFILETIME pftCreationTime, //绝对值,创建时间,1601-1-1

PFILETIME pftExitTime,   //绝对值,退出时间,1601-1-1

PFILETIME pftKernelTime,   //相对值,线程执行OS代码使用CPU时间

PFILETIME pftUserTime);   //相对值,线程执行程序代码使用CPU时间

均使用100ns的时间间隔。

c)        QueryPerformanceCounter(见SchedLab

 

六、查看线程内核对象的结构环境(CPU状态):CONTEXT

a)         CONTEXT组成部分(右ContextFlags标记):

1.CONTEXT_CONTROL:控制寄存器(指令指针、堆栈指针、标志、函数返回地址;

2.CONTEXT_INTEGER:整数寄存器;

3.CONTEXT_FLOATING_POINT:浮点寄存器

4.CONTEXT_SEGMENTS:段寄存器

5.CONTEXT_DEBUG_REGISTER:调试寄存器;

6.CONTEXT_EXTENDED_REGISTER:扩展寄存器

7.CONTEXT_FULL:所有重要寄存器

b)        查看:BOOL GetThreadContext(HANDLE, PCONTEXT);

c)        设置:BOOL SetThreadContext(HANDLE, CONST CONTEXT*);

d)        调用前先挂起线程:SuspendThread(HANDLE);

七、优先级

a)         线程在CreateProcess时在fdwCreate传递优先级;

b)        设置进程优先级:BOOL SetPriorityClass(HANDLE, DWORD);

c)        查看进程优先级:DWORD GetPriorityClass(HANDLE);

d)        设置线程优先级(创建时无参数传递):BOOL SetThreadPriorityHANDLE, int nPriority;

e)         查看线程优先级:int GetThreadPriority(HANDLE);

f)         避免系统提高优先级:

进程BOOL SetProcessPriorityBoost(HANDLE, BOOL);

线程BOOL SetThreadPriorityBoost(HANDLE, BOOL);

g)        查看是激活或停用优先级提高功能:

BOOL GetProcessPriorityBoost GetThreadPriorityBoost

h)        在控制台启动时可设置优先级,egC:/>START /LOW CALC.EXE

i)          WIN2000在任务管理器设置;

八、亲缘性(在多CPU多内存的情况下,NUMA

a)         可以指定进程在哪个CPU上运行:BOOL SetProcessAffinityMask(HANDLE, DWORD_PTR dwProcessAffinityMask);

b)        查询进程亲缘性位屏蔽:BOOL GetProcessAffinityMask(HANDLE, PDWORD_PTR, PDWORD_PTR);

c)        设置线程亲缘性:DWORD_PTR SetThreadAffinityMask(HANDLE, DWORD_PTR);

d)        为线程设置首选的CPUDWORD SetThreadIdealProcessor(HANDLE, DWORD dwIdealProcessor);

e)         EXE文件头上设置CPU亲缘性,p.29(可以使用LOAD IMAGE方法;或ImageCfg.exe;

f)         在任务管理器上修改(多CPU时);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值