双CPU 禁用一个CPU怎么实现?请高手指点
双CPU 禁用一个CPU怎么实现?请高手指点
[解决办法]
使用setprocessaffinitymask函数
设置进程的亲缘性
[解决办法]
让所有进程都在一个cpu上跑可以
但是要禁用cpu的话可能要用到驱动编程了
2003里面有这个功能,但是不知道有没有函数来实现
[解决办法]
//2007-06-13新加函数只取第一个cpu的第一个核心,为了和单核的兼容
procedure TCPUInfo.SetCPU(h: THandle;CpuNo: Integer);
//CpuNo:决定了获得第几个cpu内核的第几个序列号。
var
ProcessAffinity: Cardinal;
_SystemAffinity: Cardinal;
begin
GetProcessAffinityMask(h, ProcessAffinity, _SystemAffinity) ;
ProcessAffinity := CpuNo; //this sets the process to only run on CPU 0
//for CPU 1 only use 2 and for CPUs 1 & 2 use 3
SetProcessAffinityMask(h, ProcessAffinity)
end;
偷偷公布给你了,保密哈。
[解决办法]
这个问题我刚好正在研究,而且已经圆满解决。
告诉你个最简单有效的办法,这个办法可以停用/启用一切硬件设备。
winexec( 'cmd /k c:\devcon.exe -enable *dev_109a* ',sw_hide);
说明:
devcon.exe 是微软的小工具,搜一下很多。
*dev_109a* 是我的网卡的ID号,在设备管理器-硬件属性-详细资料中可以查到。我这是用通配符形式表示的,只要能唯一标识硬件就行,不用把那么长一串都抄上。
enable 是参数表示启用。换成disable就是禁用。
其它的不用多解释了吧。想深入了解可以查下Winexec的用法,以及devcon的详细说。这些百谷上很多。
以上是经过验证的,在xp下可以控制一切硬件设备!!!!!!
另请参考:http://community.csdn.net/Expert/topic/5684/5684133.xml?temp=.64172