定时处理程序大概就是这样的: 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;
我放了一个定时器,定时1s,每次从串口读1个数据,然后显示。
就这些操作。可是运行久了,cpu占用就上去了,那该怎么解决呢?
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;