如何控制程序占用的CPU资源(只要谈谈想法或原理,不局限于Delphi)(200分)

L

luyear

Unregistered / Unconfirmed
GUEST, unregistred user!
好久没有发过贴子,刚刚突然想到一个问题
通常程序进行复杂运算都会占用99%的CPU资源,不管你的CPU是286还是P4
有时我不需要他那么快完成,如果我可以控制程序的CPU占用率就好了
比如让他使用75%的CPU资源,留25%我自己用
难道然它算0.75秒,再停0.25秒吗?有没有更好的办法
 
像做操作系统.
[:D]
 
cpu资源分配当然是OS的事.
OS会自动按优先级分配给每个进程的.
你不想让操作系统给那么多的话,让自己的进程优先级低些就是了.
别吃多了,要浪费操作系统分的那点时间片哦.没理由的.
 
如果你不想他影响你干活,你就把他的优先级调最低,这样你不干活的时候他拼命干活,
你一干活的话操作系统会让你先干活,他等待
如果是你不想让他那么快干完活,想显得好象算了很久似的,那么没关系,让它运行,运行完
算算用了多长时间,如果发现时间太短了,你就等,等够了时间才退出
 
但是如果其他一些程序也是低優先級的,還是會搶不贏它
 
其他程序如果特别设置为低优先级,那么它和你的程序一样,也只是想利用空余时间的而已呢,不怕
 
聽聽高手的見解。
學習,并提前。
 
聽聽高手的見解。
學習,并提前。
 
找了找幫助文件,發現有兩個函數可以使用,一個是win api
BOOL SetPriorityClass(
HANDLE hProcess, // handle to the process
DWORD dwPriorityClass // priority class value
);
另一個是
SetThreadPriority
還沒有具體去試!
 
你可以让你的线程sleep一下,就可以了。
 
sleep可以暂停,但是由于我的计算占用的CPU时间不是固定的,所以sleep只能定性,不能定量
 
procedure Delay(lMilliSeconds: Dword);
var
MyEvent :Thandle;
begin
MyEvent := CreateEvent(nil,True,False,nil) ;
waitforSingleObject(MyEvent,lMilliSeconds);
CloseHandle(MyEvent);
end;
var MyEvent :Thandle;
...
MyEvent := CreateEvent(nil,Ture,False,nil) ;
waitforSingleObject(MyEvent,1);
在你的费时的循环里加上这个,可能会使计算时间加长,但是cpu占用绝对会大大大大降低。
 
多用WINDOWS API函数,
 
当然是先把自己变成0级啦!
 
设置进程优先级
 
其实我的目的是想用来测试CPU温度的,光用优先级好像不能控制CPU使用百分之几
 
现在的程序都不太考虑CPU的使用率了
 
今天发现Norton企业版杀毒有这个功能,不管有没有其他程序运行,它都只占25%左右的
CPU时间
 
可以先估计系统的能力,在程序中不同阶段设置时间消耗检查,
然后估计出软件占用的CPU时间,根据这个时间动态调整:
线程的优先级别和调整Sleep的时间长度。


这只是一个想法,还没有实际编程实现。

 
windows本身就是抢先式的多任务机制,它怎么调度线程,你除了用优先级定性调节,
几乎不可能定量,否则,一个恶意程序,连操作系统自己都死翘翘了。
 
顶部