读书人

线程占用CPU太高了,该如何处理

发布时间: 2012-04-20 15:27:03 作者: rapoo

线程占用CPU太高了
indy10 UDP控件

Delphi(Pascal) code
procedure TUDPThread.Execute;begin  while not Terminated do  begin    if not MainForm.IdUDPClient1.Active  then      Terminate    else    begin//里面什么都没有执行,CPU直接彪到50%    end;  end;end;


[解决办法]
procedure Delay(time: Cardinal);
var ncurr : Cardinal;
begin
ncurr := GetCurrentTime;
while GetCurrentTime - ncurr <= time do Application.ProcessMessages;
end;

while not Terminated do
begin
if not MainForm.IdUDPClient1.Active then
Terminate
else
begin
//里面什么都没有执行,CPU直接彪到50%
end;
delay(10);
end;

[解决办法]
感觉代码有点类似死循环。sleep试试。
var a:boolean;
a := true;
while a do
begin

end;
//这样子CPU应该也会这样会吧,手头没DELPHI,没法测试了。
[解决办法]
procedure TUDPThread.Execute;
begin
while not Terminated do
begin
if not MainForm.IdUDPClient1.Active then
Terminate
else
begin
//里面什么都没有执行,CPU直接彪到50%
end;
sleep(1000) //每隔一秒线程执行一次。 你的那个一秒不停执行,当然CPU占用高。 end;
end;

读书人网 >.NET

热点推荐