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

解决方案 »

  1.   

    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;
      

  2.   

    感觉代码有点类似死循环。sleep试试。
    var a:boolean;
    a := true;
    while a do
    beginend;
    //这样子CPU应该也会这样会吧,手头没DELPHI,没法测试了。
      

  3.   

    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;