首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-04-20 
线程占用CPU太高了indy10 UDP控件Delphi(Pascal) codeprocedure TUDPThread.Executebeginwhile not Termi

线程占用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;

热点排行