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

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%,被吃光了,这种现象要如何处理?
 
G

gxw

Unregistered / Unconfirmed
GUEST, unregistred user!
在你的例子中,如果仅想将循环期间的cpu占用降下来,完全可考虑在外循环与内循环之间加句sleep(1),估计能立即将cpu占用降到5%以下:for i .............begin
sleep(1);
for j.........end;
 

加油+加油

Unregistered / Unconfirmed
GUEST, unregistred user!
同意楼上的
 
S

skyccf

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
begin
k := i;
sleep(10);
end;
end;
end;
 
A

arraiy

Unregistered / Unconfirmed
GUEST, unregistred user!
接受答案了.
 

Similar threads

I
回复
0
查看
691
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部