我的线程cpu占用率为什么是100%啊?(200分)

  • 主题发起人 主题发起人 ericyeoh
  • 开始时间 开始时间
E

ericyeoh

Unregistered / Unconfirmed
GUEST, unregistred user!
这是我的原程序,TTransFile是一个线程类,它的Execute是While Truedo
循环
myTransFile:=TTransFile.Create(True);
myTransFile.FreeOnTerminate:=True;
myTransFile.Priority:=tpIdle;
myTransFile.Resume;
一启动线程,我的CPU占用率就到了100%,那位能帮帮忙啊
 
你的myTransFile的execute事件里做了些什么?
 
>>它的Execute是While Truedo
循环
循环里做了什么?
 

myTransFile.Priority:=tpIdle;//???
 
检查一下你的Execute的While Truedo
循环是否陷入了死锁,应该随时保持一个线程在运行
否则会陷入死锁。
 
每次循环结束的时候,加一句Sleep(5)。
 
如果进程运行会同时操作VCL资源,为了安全,应该在Execute过程中的执行部分加入了Synchronize调用。
 
如果在线程中没有停顿或等待,线程会占掉CPU的;
不过有多个线程时,是看谁优先级高谁就抢得多,如果没有人跟它抢,那它级别
再低也会把CPU100%占掉。
所以应在线程中加SLEEP之类的暂停语句。
 
你的Priority:=tpIdle,那么如果系统处于Idle,时间好像都让给了线程,
好像有一个什么function可以让线程让出部分时间!
 
我还以为中了"求职信"呢!
 
>>While Truedo
象这种循环肯定是占100%的CPU了,跟其它任何代码都不会有关系,不信你新建一个工程,
然后加入一个Button,再写如下代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
while truedo
begin
end;
end;
运行一下,你的CPU绝对是100%。
 
哪要怎樣才不會占用100%呢﹖我對此也很感興趣﹐怎么讓他在后台工作﹐執行多線程﹐但
CPU不占用那么多﹖
 
试一试:在线程中写:
procedure TThreadTest.Execute;
begin
{ Place thread code here }
While not Terminateddo
Sleep(100);
end;

CPU占用率几为0。
 
procedure Taaa.Execute;
var
I: Integer;
begin
{ Place thread code here }
While not Terminateddo
begin
for I:=0 to 6000000do
;
Sleep(10);
end;
end;

CPU占用率几为50%。
 
我个人觉得人在编写线程时最好对每个线程lock
用完后unlock
 
我就是觉得线程就是死循环。
 
哪有让线程Sleep(100);的?线程是在需要的时候产生,完成一定的工作后就结束,而不应该
让它从始至终在那里循环,你应该重新设计一下你的线程。
 
同意教父所说的。你为什么要用WHILE TRUEdo
这样的循环呢?[?]
 
并不是死循环吧,里面可以有中断代码的。
主线程就是一个“死循环”:
procedure TApplication.Run;
begin
。。。
repeat
try
HandleMessage;//这里有等待和处理消息的代码。
except
HandleException(Self);
end;
until Terminated;
。。。
end;
 
后退
顶部