收录日期:2018/09/20 15:48:17 时间:2016/05/23 01:21:15 标签:VCL组件开发及应用
在一个窗体上,有四个定时器控件;并且每个的扫描频率各不相同。
最快的为25毫秒扫描一次。
问题是:运行程序后,在我关闭窗体时,总是几次也关闭不了。
我设置断点,问题在于关闭窗体时,有的定时器还在执行。

我已经在关闭窗体时设置所有的定时器都无效;但是还是不行。

请问如何改善?谢谢大家!!
在Timer事件中:
begin
  TimerName.Enable:=false;
  ///Progress Code
  TimerName.Enable:=true;
end;
25毫秒?

不可能吧,最小只能达到55ms
其实具体是不是25毫秒我也不清楚?只是说非常快而已。
在Timer事件中:
begin
  TimerName.Enable:=false;
  ///Progress Code
  TimerName.Enable:=true;
end;

有什么作用?我不是很明白这个的意思。
试一下啊
我以前遇到过,实际的问题好像不是出在TIMER上,
你用APPLICATION.TERMINATE试试。
to : WGYKING
好像没什么效果。
to airhand:
好像也不行。我觉得问题应该是在TIMER上。
如果我把所有的TIMER事件去掉,那么关闭窗体就非常非常的正常。
设置一个全局变量:P_Run

在窗体初始化中
begin
  P_Run:=False;
end;


在Timer事件中:
begin
  TimerName.Enable:=false;
  if P_Run=True then  eixt;  //!!!!   
  //...其它处理
  
   
  //... 
  TimerName.Enable:=true;
end;

在关闭窗体的事件中:
begin
  P_Run:=True;
end;







fengsx:
  你的代码我看了之后,感觉不是很合适。你在Timer事件中有一句:
if P_Run=True then  eixt;  //!!!!   
如果当时程序执行到该语句之后的代码时,不是照样还要再继续执行直到此次扫描完毕。
我把代码改了一下:
如你设置的全局变量,窗体初始为false;关闭时为false。
不过就是加了一个TTimer控件,不断扫描,检查该全局变量的值。
只要为true,马上中止程序的执行。

谢谢你给我的思路!
本来我以为成功了,可是后来发现,效果还是不行。
请各位再给我点帮助,谢谢!