限制CPU个数

var 
  cpuset  : set of 0..31;
  cpucount, i:integer;
begin
 cpucount := sysset.ReadInteger('SysConfig', 'cpucount', 2); // 默认给两个就可以了
 cpuset:=[];
 for i := 0 to  cpucount-1 do
  include (cpuset,i);

//  include (cpuset,1); // add cpu 6
// ShowMessage(IntToHex(dword(cpuset),2));
//ShowMessage(IntToStr(dword(cpuset)));
{
每个处理器都表示为一个位。 位0为 processor one,位1为 processor 2,依此类推。
如果将某个位设置为值1,则会为线程分配选择相应的处理器。
如果将此 ProcessorAffinity 值设置为零,则操作系统的计划算法会设置线程的关联。
如果 ProcessorAffinity 将该值设置为任何非零值,则该值将被解释为指定可供选择的处理器的位掩码。

二进制值:
00000000 00000001=1=cpu0
00000000 00000010=2=cpu1
00000000 00000100=4=cpu2
00000000 00001000=8=cpu3
00000000 00010000=8=cpu4 以此类推

注解
位掩码    二进制值    合格处理器
0x0001    00000000 00000001    1
0x0003    00000000 00000011    1和2
0x0007    00000000 00000111    1、2 和 3
0x0009    00000000 00001001    1和4
0x007F    00000000 01111111    1、2、3、4、5、6和7
}
SetProcessAffinityMask(pid,  dword(cpuset));

var   cpuset  : set of 0..31;  cpucount, i:integer;begin cpucount := sysset.ReadInteger('SysConfig', 'cpucount', 2); // 默认给两个就可以了 cpuset:=[]; for i := 0 to  cpucount-1 do  include (cpuset,i);
//  include (cpuset,1); // add cpu 6// ShowMessage(IntToHex(dword(cpuset),2));//ShowMessage(IntToStr(dword(cpuset)));{每个处理器都表示为一个位。 位0为 processor one,位1为 processor 2,依此类推。如果将某个位设置为值1,则会为线程分配选择相应的处理器。如果将此 ProcessorAffinity 值设置为零,则操作系统的计划算法会设置线程的关联。如果 ProcessorAffinity 将该值设置为任何非零值,则该值将被解释为指定可供选择的处理器的位掩码。
二进制值:00000000 00000001=1=cpu000000000 00000010=2=cpu100000000 00000100=4=cpu200000000 00001000=8=cpu300000000 00010000=8=cpu4 以此类推
注解位掩码二进制值合格处理器0x000100000000 0000000110x000300000000 000000111和20x000700000000 000001111、2 和 30x000900000000 000010011和40x007F00000000 011111111、2、3、4、5、6和7}SetProcessAffinityMask(pid,  dword(cpuset));

原文地址:https://www.cnblogs.com/BTag/p/15798224.html