请问如何降低线程的CPU占用率? ( 积分: 100 )

  • 主题发起人 主题发起人 panbq
  • 开始时间 开始时间
P

panbq

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个查询的单线程,如果该线程一开始执行,CPU占用率马上狂升,占用率100%,严重影响其他应用程序的运行,怎么才能降下来呢?该线程的优先级是TPIDLE。
 
我写了一个查询的单线程,如果该线程一开始执行,CPU占用率马上狂升,占用率100%,严重影响其他应用程序的运行,怎么才能降下来呢?该线程的优先级是TPIDLE。
 
在其 while/循环 中加入Sleep(0) 或者 Sleep(1)
 
1.设置线程的优先级
2.sleep,转交控制权
......
 
1.设置线程的优先级
那应该如何设置线程的优先级呢,我这里设的TPIDLE,应该是最低的
 
在execute中加入一行sleep(55);即可
 
我在线程的循环中加入sleep(1),可没有什么效果啊?
 
一般Sleep(50)即可
 
楼上大侠,给个例子如何,我按上面的加了,可CPU占用率不见下降啊。。。。急人。。。谢谢了。还有,应该说TPIDLE的优先级是最低的了,这样设对于降低CPU占用率应该最好一点吧?
 
又没说是什么程序.
贴点代码出来人家才好帮你呀.
 
加个sleep后CPU的占用率一下子就会降下来的
如execute里的代码如下
begin
..
while turedo
begin

end;
..
end;
这时CPU占用率会很高的,在while里面合适的位置添个sleep就会好很多的,
在你的while循环里加,你要是加在外面一点效果都没有的啊
 
sleep不可以的,要用SleepEx
DWORD SleepEx(
DWORD dwMilliseconds, // time-out interval in milliseconds
BOOL bAlertable // early completion flag
);
 
如果是单线程,就不好办了
在while里加句
Application.ProcessMessages;
试试吧
 
加sleep等都是治标不治本的,降的极少.
要用Api函数,等待某个时间来到,你线程才工作,其他情况,你的线程进入休眠状态.
等待单个核心对象来才让线程工作WaitForSingleObject()
if WaitForSingleObject(FHSem, 1000) = WAIT_OBJECT_0 then
begin
end;
等待多个事件为WaitForMultipleObjects,具体用法自己查api函数
 
sleep真的很不好用,你可以调用API降低线程的优先级。
 
感谢各位大侠的回答,前几天已经解决了,只是我记得已经把分给分配掉了,今天进来一看怎么没结?奇怪,,不过还是感谢。。。。说一下我解决的办法:
我是按照顶楼的办法解决的,在以前的循环里,是根据一个变量来判断线程是否结束的,如下代码:
while not thread_finishdo
begin
if thread_finish then
exit;
application.ProcessMessages;
end;
之前我是在线程里加入SLEEP,无效果,后来在application.ProcessMessages之后加入sleep(100),效果非常明显。写出来共勉。
 
多人接受答案了。
 
后退
顶部