亲缘性的意思是 进程只在某个cpu上运行 ,比如
BOOL WINAPI SetProcessAffinityMask(
_In_ HANDLE hProcess,
_In_ DWORD_PTR dwProcessAffinityMask
);
dwProcessAffinityMask 如果是 0 , 代表当前进程只在cpu0 上工作;
如果是 0x03 , 转为2进制是 00000011 . 代表只在 cpu0 或 cpu1上工作;
优先级:
//注意, 如果线程的优先级会随着进程的优先级浮动
//线程:SetThreadPriority, GetThreadPriority
SetPriorityClass(GetCurrentProcess(),HIGH_PRIORITY_CLASS );
DWORD pri = GetPriorityClass(GetCurrentProcess());
亲缘性:
#define CPU_MASK(mask) (1<<(mask))
SYSTEM_INFO sys;
GetSystemInfo(&sys);
DWORD cpuCount = sys.dwNumberOfProcessors; //cpu数量 4;
DWORD_PTR pmask, smask; //进程mask, 系统mask;
/*
CPU_MASK(3) 代表 1<<3 -> 2进制 : 1000 . 意思是只能使用 cpu3 (cpu0 起算).
这个值不要超过cpuCount;
SetProcessAffinityMask 设置之后可以在任务管理器中查看相关性.
一旦设置, 所有线程将只在这些cpu中执行.子进程也将继承.
SetThreadAffinityMask 用法类似,但 mask 必须是进程使用的cpu 中的一项或几项;
GetProcessAffinityMask 将返回2个mask , 一个是当前进程 一个是系统
*/
SetProcessAffinityMask(GetCurrentProcess(),CPU_MASK(3));
GetProcessAffinityMask(GetCurrentProcess(),&pmask,&smask);
cout << hex <<pmask << ',' << smask << endl;