我使用一个定时器,定时1s,从下位机采集一个数据,显示数据和时间。开始的时候运行好好的,运行了3,4个小时之后,系统很卡,cpu占用100%,时间显示也不正确了,每10s就会出现一次跳格(1,2,3,4,6,7,8,9中间的5就没掉了),请问怎么修改可以避免cpu占用100%?
请大家帮帮忙,谢谢

解决方案 »

  1.   

    你先看看任务管理器,是哪个在大量占用CPU,如果是你这个Application的话,那就先从你的系统看起,主要看是不是启动了太多的线程(从任务管理器也可以看到线程数)
      

  2.   

    一个timer不就是一个线程吗?java里面会自动处理无用资源,但是delphi里面我不太清楚怎么解决这个问题。程序很简单就是定时1s采集一个数据显示一下。
      

  3.   

    一个timer怎么算是一个线程呢 线程要写到特定的线程函数里面去啊 ~
      

  4.   

    嗯,大概我理解的不够透彻吧
    我放了一个定时器,定时1s,每次从串口读1个数据,然后显示。
    就这些操作。可是运行久了,cpu占用就上去了,那该怎么解决呢?
      

  5.   

    定时处理程序大概就是这样的:
    procedure TForm6.TimerTimer(Sender: TObject);
    begin
        label_time.Caption:=getTime;
        label_ShowData.Caption:='当前温度:'+tempconver;
        memo_Receive.Text:=IntToStr(totalNum)+':('+tempature+')'+#10+memo_Receive.Text;
        memo_Conver.Text:=IntToStr(totalNum)+':('+tempconver+')'+#10+memo_Conver.Text;
        label_totalNum.Caption:='采集数据个数:'+IntToStr(totalNum);
        while True do
        begin
            MSComm.Output:='001?T'+#13;
            sleep(30);
            if MSComm.InBufferCount=13 then
            break
            else
            begin
              MSComm.InBufferCount:=0;
              MSComm.OutBufferCount:=0;
              continue;
            end;
        end;
        tempature:=MSComm.Input;
        tempature:=trim(tempature);
        tempconver:=Copy(tempature,4,Length(tempature));
        tempconver:=getTemp(tempconver);
        totalNum:=totalNum+1;
        MSComm.OutBufferCount:=0;
        MSComm.InBufferCount:=0;
    end;