最有效的获取计时器的方法

Most efficient way to retrieve a timer?

本文关键字:方法 计时器 获取 有效      更新时间:2023-10-16

我以前从未真正使用过计时器,但我现在的项目需要一个。

所以这可能是一个愚蠢的问题:但是什么是"正常"的方式来检索游戏计时器,有没有更好/更有效的方法?

谢谢

由于您可能想要花费的时间,而它可能很短,因此您可能需要使用time.h中定义的clock()函数。

这是我在MSDN库中找到的:


计算调用进程使用的挂钟时间。

clock_t clock( void );

自进程启动以来经过的时钟时间(以秒为单位的经过时间乘以CLOCKS_PER_SEC)。如果经过的时间不可用,则该函数返回-1,并转换为clock_t。

评论

时钟函数告诉调用进程使用了多少时间。计时器的刻度大约等于1/CLOCKS_PER_SEC秒。在6.0之前的Microsoft C版本中,CLOCKS_PER_SEC常数被称为CLK_TCK。

例子://crt_clock.c//这个例子提示多长时间//程序开始运行,然后继续运行//显示该时间段的运行时间。//

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void sleep( clock_t wait );
int main( void )
{
   long    i = 6000000L;
   clock_t start, finish;
   double  duration;
   // Delay for a specified time.
   printf( "Delay for three secondsn" );
   sleep( (clock_t)3 * CLOCKS_PER_SEC );
   printf( "Done!n" );
   // Measure the duration of an event.
   printf( "Time to do %ld empty loops is ", i );
   start = clock();
   while( i-- ) 
      ;
   finish = clock();
   duration = (double)(finish - start) / CLOCKS_PER_SEC;
   printf( "%2.1f secondsn", duration );
}
// Pauses for a specified number of milliseconds.
void sleep( clock_t wait )
{
   clock_t goal;
   goal = wait + clock();
   while( goal > clock() )
      ;
}

Delay for three seconds
Done!
Time to do 6000000 empty loops is 0.1 seconds

如果您想要跨平台和高性能的时间库,请使用boost::date_time。对于计时器,只需获取当前时间,并从下一次读取中减去它(它们有计算时差等操作符,代码是可读的)。

当前时间使用boost::posix_time::microsecond_clock::universal_time()读取,并存储在ptime结构体中。(posix_并没有提到它只在POSIX系统上可用;

如果你在windows上使用c++,你会想使用QueryPerformanceCounter/queryperformancfrequency

http://msdn.microsoft.com/en-us/library/windows/desktop/ms644904 (v = vs.85) . aspxhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms644905 (v = vs.85) . aspx

如果你在linux上检查clock_gettime(CLOCK_REALTIME)

http://linux.die.net/man/3/clock_gettime

clock()建议是不正确的,因为它是过程中使用的时间。因为有一个循环,他的函数最终会开始正确,但如果你阻塞,这将无法工作。

http://linux.die.net/man/3/clock