GetTickCount()和clock()函数计时哪个更准确些!

payne 2001-07-19 08:38:46
我在用GetTickCount()和clock()函数测试同一段代码所执行的时间长度时,发现前者为
2ms,而用后者测试为9ms,并且用同一函数在不同时间测试时得出的结果相差甚远。有没有什么好方法解决一下。是不是只有求助硬件了,可我在C++Builder下访问不到8253呀!
...全文
873 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
alanwang 2001-07-19
  • 打赏
  • 举报
回复
用这个吧,包你满意,我已测试过。
利用计算机中的8253,8254可编程时间间隔定时器芯片实现的。在计算机内部有三个独立的16位计数器。计数器可以以二进制或二—十进制(BDC)计数。计数器每秒产生1193180次脉冲,每次脉冲使计数器的数字减一,产生频率是可变的,用QueryPerformanceFrequency可以得到,一般情况下都是 1193180。QueryPerformanceCounter可以得到当前的计数器值。所以只要你的计算机够快, 理论上精度可以达到1/1193180秒。

QueryPerformanceFrequency(&litmp); // 获得计数器的时钟频率
dfFreq=(double)litmp.QuadPart;

// 延迟 MilliSecond 毫秒 ,大于x毫秒而与之最接近的毫秒数,精度预计0.02ms以上
void __fastcall TMainForm1::QuerySleep(float MilliSecond)
{
QueryPerformanceCounter(&litmp); // 获得初始值
QPart1=litmp.QuadPart;
do
{
QueryPerformanceCounter(&litmp); // 获得终止值
QPart2=litmp.QuadPart;

dfMinus=(double)(QPart2-QPart1);
dfTim=dfMinus/dfFreq; // 时间差
}while(dfTim<(MilliSecond/1000));
}
yphy 2001-07-19
  • 打赏
  • 举报
回复
当然是GetTickCount()更精确,因为它是多媒体时间,其实还有更精确的是timeGetTime()

yphy

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧