回 帖 发 新 帖 刷新版面

主题:Timer控件为什么计时不准确?

我在使用Borland C++ Builder 6.0时,发现一件很奇怪的事:Timer的Interval属性,如果设成200、50、40、10,都很正常,与电脑系统时钟均保持一致。但如果设成25,却发现,Timer1Timer事件实际上并不是每隔25毫秒发生一次,而是(与系统时钟相比)略大于25毫秒。这是怎么回事呢?

我编的小程序如下:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int times;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
times=0;
Timer1->Interval=25;
if(Timer1->Enabled==true)   Timer1->Enabled=false;
else                        Timer1->Enabled=true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
times++;
Label1->Caption=FloatToStr(float(times)*Timer1->Interval/1000);
}
//---------------------------------------------------------------------------

这个程序运行时,我发现,Label1显示的时间,比系统时钟要慢一些。当系统时钟(从0秒开始计数)显示30秒时,Label1(从0秒开始计数)显示25秒。
真怪啊!

有的仁兄告诉我,Timer控件本身,它就不是准确计时的控件。请问:那该怎么办呢?要想准确计时,有什么办法可以实现呢?

回复列表 (共2个回复)

沙发

你搜索一下,精确计时的资料吧。

板凳

Timer本身就不精确
如果要求精确可以使用多媒体定时器Multimedia Timers,但是比较耗资源,具体查看msdn

我来回复

您尚未登录,请登录后再回复。点此登录或注册