请大家帮帮忙,谢谢
7 个解决方案
#1
你先看看任务管理器,是哪个在大量占用CPU,如果是你这个Application的话,那就先从你的系统看起,主要看是不是启动了太多的线程(从任务管理器也可以看到线程数)
#2
就是我这个application
#3
一个timer不就是一个线程吗?java里面会自动处理无用资源,但是delphi里面我不太清楚怎么解决这个问题。程序很简单就是定时1s采集一个数据显示一下。
#4
一个timer怎么算是一个线程呢 线程要写到特定的线程函数里面去啊 ~
#5
嗯,大概我理解的不够透彻吧
我放了一个定时器,定时1s,每次从串口读1个数据,然后显示。
就这些操作。可是运行久了,cpu占用就上去了,那该怎么解决呢?
我放了一个定时器,定时1s,每次从串口读1个数据,然后显示。
就这些操作。可是运行久了,cpu占用就上去了,那该怎么解决呢?
#6
定时处理程序大概就是这样的:
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;
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;
#7
主要内容就是:设置一个定时器,定时1s,每次从串口读1个数据,然后显示(同时显示采集时间)。
#1
你先看看任务管理器,是哪个在大量占用CPU,如果是你这个Application的话,那就先从你的系统看起,主要看是不是启动了太多的线程(从任务管理器也可以看到线程数)
#2
就是我这个application
#3
一个timer不就是一个线程吗?java里面会自动处理无用资源,但是delphi里面我不太清楚怎么解决这个问题。程序很简单就是定时1s采集一个数据显示一下。
#4
一个timer怎么算是一个线程呢 线程要写到特定的线程函数里面去啊 ~
#5
嗯,大概我理解的不够透彻吧
我放了一个定时器,定时1s,每次从串口读1个数据,然后显示。
就这些操作。可是运行久了,cpu占用就上去了,那该怎么解决呢?
我放了一个定时器,定时1s,每次从串口读1个数据,然后显示。
就这些操作。可是运行久了,cpu占用就上去了,那该怎么解决呢?
#6
定时处理程序大概就是这样的:
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;
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;
#7
主要内容就是:设置一个定时器,定时1s,每次从串口读1个数据,然后显示(同时显示采集时间)。