在windows下要获得cpu序列号,很多人都知道可以使用汇编指令cpuid来获取cpu的序列号,不过由于执行cpuid指令的时候获得的只是当前cpu的序列号,为了保证每次获得的cpu序列号一致可以使用
SetProcessAffinityMask 函数强制进程只在指定的cpu上运行,查看下MSDN,调用SetProcessAffinityMask 使用的句柄需要PROCESS_SET_INFORMATION权限,所以用下面的代码来限制进程执行的cpu
/*指定线程在第1个cup上运行保证获得正确的cpuid*/
HANDLE h = OpenProcess(PROCESS_SET_INFORMATION,true,GetCurrentProcessId());
BOOL ret = SetProcessAffinityMask(h, 0x0001);
SetProcessAffinityMask的第二个参数也很有意思,是用二进制的第n位表示是否允许进程在第n个cpu上执行,从这点上猜测windows系统可以支持的cpu数量上限是32个?