The SetProcessAffinityMask function sets a processor affinity mask for the threads of the specified process.
BOOL SetProcessAffinityMask(
HANDLE hProcess,
DWORD_PTR dwProcessAffinityMask
);
//
get system info
SYSTEM_INFO SystemInfo;
GetSystemInfo(
&
SystemInfo);
printf(
"
"
"
dwNumberOfProcessors=%u, dwActiveProcessorMask=%u, wProcessorLevel=%u,
"
"
wProcessorArchitecture=%u, dwPageSize=%u
"
,
SystemInfo.dwNumberOfProcessors, SystemInfo.dwActiveProcessorMask, SystemInfo.wProcessorLevel,
SystemInfo.wProcessorArchitecture,SystemInfo.dwPageSize
);
if
(SystemInfo.dwNumberOfProcessors
<=
1
)
return
;
DWORD dwMask
=
0x0000
;
DWORD dwtmp
=
0x0001
;
int
nProcessorNum
=
0
;
for
(
int
i
=
0
; i
<
32
; i
++
)
{
if(SystemInfo.dwActiveProcessorMask & dwtmp)
{
nProcessorNum++;
if(nProcessorNum <= 2)
{
//如果系统中有多个处理器,则选择第二个处理器
dwMask = dwtmp;
}
else
{
break;
}
}
dwtmp *= 2;
}
//
end of for
//
进程与指定cpu绑定
SetProcessAffinityMask(GetCurrentProcess(), dwMask);
//
线程与指定cpu绑定
//
SetThreadAffinityMask(GetCurrentThread(),dwMask);
return
;
浙公网安备 33010602011771号