循环开始后,让TIMER控件的ENABLE为真,循环结束后,让TIMER控件的ENABLE为假,要怎么计算循环要花多少时间?
我写了个就像我说的一样可是计算出来的时间很不精确,而且只能是计算一分钟这内的时间,就是循环开始时取得当前的秒数,循环结束后再取秒数,最后两个相减~~~可是要是超过一分钟了就会有错误。可不可以精确到毫秒的啊?帮帮忙~~

解决方案 »

  1.   

    不要用Timer, 按以下示例:
    使用GetTickCount(), 其返回开机至目前的毫秒数
    注意: 如果你的机器是连续运行, 其加至 $FFFFFFFF 时, 下一毫秒会回到0, 这大概需要49.7天// 返回两个Tick之间的毫秒数 
    DWORD GetTickDiff(oldTick, newTick: DWORD): DWORD;
    begin
      if oldTick > newTick then
        Result := $FFFFFFFF - oldTick + newTick
      else
        Result := newTick - oldTick;
    end;procedure YourProc;
    var
      OldTick: DWORD;
    begin
      oldTick := GetTickCount;
      repeat
        // ...
      until (...); // 你的循环
      ShowMessage(IntToStr(GetTickDiff(oldTick, GetTickCount)));
    end;
      

  2.   

    var
      BeginTime: Int64;
      UsedTime: Int64;
    begin
      BeginTime := GetTickCount;
      //do sth
      
      UsedTime := GetTickCount - BeginTime;
    end;UsedTime,就是你中间代码消耗的时间.GetTickCount参考MSDN,是一个CPU的计数器,单位为MS.