我做了一个单窗体多线程通讯程序,主线程用Mscomm定时收数据,一线程实现动态绘图,由按钮启动另一Timer,定时调用绘图线程,程序运行很好。后来在前加了其他窗体,由窗体的OnCreate事件启动定时收数据,运行很好,再加上定时调用绘图线程时,一旦运行至该窗体,界面出来后很快提示出错:EAccess Violation with message 'Access Violation at address 004166cc in module \'user.exe',Write of address 000000c'.''user.exe'为工程名。
各位高手们,帮我看看怎么办。
各位高手们,帮我看看怎么办。
贴点代码吧。也请顺便帮我看看:
http://www.csdn.net/expert/topic/1043/1043824.xml?temp=.6844904
我把启动定时收数据的线程放到窗体的onActivate中去试过,同样抱错。
部分代码:
procedure TForm_show.FormCreate(Sender: TObject);
begin
if (Timer_WenThr.Enabled=false) and (ThrStart_Wen=1) then {温度线程时间开关}
begin
Timer_WenThr.Enabled:=True;
Timer_WenThr.Interval:=T_Interval;
Scale_Wen:=3.5;
Step_Wen:=Drawgrid1.DefaultColWidth+1 ;
X2_Wen:=X0; {中间变量}
Y2_Wen:=Y0;
end;procedure TForm_show.Timer_WenThrTimer(Sender: TObject);
begin
if ThrStart_Wen=1 then
begin
if Length(Edit_Wen.Text)=0 then Thread_Wen.Suspend
else
begin
with DrawGrid1.Canvas do
X1:=X2_Wen;
Y1:=Y2_Wen;
F_Wen:=StrToFloat(Edit_Wen.Text);
X2:=X1+Step_Wen;
Y2:=Y0-Round(scale_Wen*F_Wen);
X2_Wen:=X2;
Y2_Wen:=Y2;
Thread_Wen:=TDrawThread.Create (DrawGrid1,clRed,tpnormal,X1,Y1,X2,Y2);
Thread_Wen.Resume;
end;
end
else
Thread_Wen.Terminate;
end;