限制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));