线程运行CPU占用100%(20)

  • 主题发起人 主题发起人 arraiy
  • 开始时间 开始时间
A

arraiy

Unregistered / Unconfirmed
GUEST, unregistred user!
先看代码:procedure TTestThread.Execute;var i, j, k: integer;
begin
inherited;
while not Terminateddo
begin
FreeOnTerminate := true;
for i := 0 to 10000000do
for j := 0 to 100000do
k := i;
sleep(1000);
end;
end;
在线程中,加入Sleep,可以让CPU空闲出来处理其它线程的请求,这样就不会导致一个线程吃光CPU的情况出现,上面代码中我加入了Sleep,但是在Sleep之前,有一个超大的循环,可能需要5分钟时间才能执行完,所以线程要等到5分钟之后才会执行Sleep,而在这5分钟内,CPU就是100%,被吃光了,这种现象要如何处理?
 
在你的例子中,如果仅想将循环期间的cpu占用降下来,完全可考虑在外循环与内循环之间加句sleep(1),估计能立即将cpu占用降到5%以下:for i .............begin
sleep(1);
for j.........end;
 
同意楼上的
 
procedure TTestThread.Execute;var i, j, k: integer;
begin
inherited;
while not Terminateddo
begin
FreeOnTerminate := true;
for i := 0 to 10000000do
for j := 0 to 100000do
begin
k := i;
sleep(10);
end;
end;
end;
 
接受答案了.
 

Similar threads

I
回复
0
查看
754
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部