本帖最后由 ydtuiguang 于 2012-01-13 14:20:21 编辑

解决方案 »

  1.   

    timer 没遇到过不稳定的情况啊,只是精度并不高。
      

  2.   

    软件有内存错误。timer会被其它代码影响不?
      

  3.   

    如果用不好,用什么都白搭。
    你可以一个timer干好几件事。
      

  4.   

    代码很简单啊。就是其它代码不知会影响不。
    有四五个timer。还用到了settimer函数
    procedure doing();
    begin
    timer1.enabled := false;
    try 
    timer1.interval := 50000;//任意数。每次不同。代码应该不会错。是加减计算
    finally 
    timer1.enabled := true;//doing开始执行重新计时
    end;//doing code.....end;
    procedure timer1ontimer(...);
    begin
    //timer1.enabled := false;//不停止计时。直到doing再次被执行时重新计时
    try doing; except end;//设定时间内doing没完成重新执行
    end;
      

  5.   

    如果是这代码,不可能有内存异常.你不会在哪 free 了 timer1 吧
      

  6.   

    timer1.interval := 50000; 
    这个你都要try  finally什么的?
    另外,作为单线程,OnTimer里的东西(包括调用的函数)没执行完时,如果不特殊处理,是不会执行其他消息(包括后来的OnTimer)的。
    你折腾那些try啥的除了让你的程序逻辑更乱以外没有其它用。
      

  7.   

    timer不会不稳定。他只不过是一个定时发生的消息而已。我看不稳定的是你怎么用它实现你要达到的目的。
      

  8.   


    一直用D7,没碰到Timer不稳定情况,消耗时间的不介意放入Timer,开个线程是最好的解决办法
      

  9.   

    lhylhy
    说得有道理。。try doing; except end;//设定时间内doing没完成重新执行
    如果ontimer执行doing一直没完成。那下个ontimer就不会发生了。计时就没用了
      

  10.   

    procedure timer1ontimer(...);
    begin
    //timer1.enabled := false;//不停止计时。直到doing再次被执行时重新计时
    settimer(handle, 0, 50, @doing);//设定时间内doing没完成重新执行
    end;如果改成这样也许就可以了!!!
      

  11.   

    procedure doing();
    begin
    timer1.enabled := false;
    try 
    timer1.interval := 50000;//任意数。每次不同。代码应该不会错。是加减计算
    //doing code.....
    finally 
    timer1.enabled := true;//doing开始执行重新计时
    end;end;
      

  12.   

    一般用timer时间长,需要分成多分,中间调用Application.ProcessMessages
      

  13.   

    timer 是简单的计时器啊。timer其实是在主线程里面执行的,可以控制VCL, 不然都是多线程好用。
      

  14.   

    Timer只是一个定时消息而已,其消息级别较低,同WM_PAINT相同,系统繁忙时可能被系统丢弃..就这样...