procedure TForm1.dotest;
begin
sleep(250);application.ProcessMessages;
end;//timer1.interval:=100;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
dotest;
end;问题简化后大概就是以上的代码,ontime事件运行时间长了,就会出现堆栈溢出的问题!
请高手指正 :(
begin
sleep(250);application.ProcessMessages;
end;//timer1.interval:=100;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
dotest;
end;问题简化后大概就是以上的代码,ontime事件运行时间长了,就会出现堆栈溢出的问题!
请高手指正 :(
Cardinal类型范围是0到4294967295,程序本身不应该有错误的!
当时我还开了同样的两个定时器,一共是3个
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls,inifiles;type
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
Edit1: TEdit;
Timer2: TTimer;
Timer3: TTimer;
Button2: TButton;
Button3: TButton;
Edit2: TEdit;
Edit3: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure Timer3Timer(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure test;
procedure dotest;
end;var
Form1: TForm1;
count1,count2,count3:integer;implementation{$R *.DFM}procedure TForm1.dotest;
begin
sleep(250);application.ProcessMessages;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
count1:=1;
count2:=1;
count3:=1;
end;procedure TForm1.test;
var str:Tstringlist;
begin
str:=Tstringlist.Create;
try
dotest;
finally
str.Free;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
inc(count1);
edit1.Text:=inttostr(count1);
dotest;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
timer2.Enabled:=true;
end;procedure TForm1.Timer2Timer(Sender: TObject);
begin
inc(count2);
edit2.Text:=inttostr(count2);
dotest;
end;procedure TForm1.Timer3Timer(Sender: TObject);
begin
inc(count3);
edit3.Text:=inttostr(count3);
dotest;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
timer3.Enabled:=true;
end;end.大家可以运行着试试
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=false;//禁止Timer1
inc(count1);
edit1.Text:=inttostr(count1);
dotest;
Timer1.Enabled:=true;//然后在恢复
end;
其他Timer一样。试试另外你的Test好象没有用吧:)