最有效的获取计时器的方法
Most efficient way to retrieve a timer?
我以前从未真正使用过计时器,但我现在的项目需要一个。
所以这可能是一个愚蠢的问题:但是什么是"正常"的方式来检索游戏计时器,有没有更好/更有效的方法?
谢谢
由于您可能想要花费的时间,而它可能很短,因此您可能需要使用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_gettimeclock()建议是不正确的,因为它是过程中使用的时间。因为有一个循环,他的函数最终会开始正确,但如果你阻塞,这将无法工作。
http://linux.die.net/man/3/clock- Linux的Cpp上的计时器
- 提升 ASIO 无法识别计时器对象
- 提升 asio 并发计时器取消问题与链
- 使用单体计时器的pthread_cond_timedwait有时会比预期晚超时
- 窗口中的微秒计时器
- 计时器是否从另一个线程启动?
- 如何在 c++ 中创建计时器
- C++回调计时器实现
- 在计时器或主线程外部的命令上销毁/替换线程
- 如何制作每秒从 30 乘 1 倒计时的计时器?
- 保留计时器集合(对象与指针)的最佳方法
- 在网络套接字计时器滴答后增加asio短读错误
- 在C++线程内实现多个计时器的最安全方法
- 实现高分辨率计时器的最佳方法
- 有什么方法可以用本机C 代码替换Windows API计时器(settimer)
- 如何将计时器添加到每种类方法中
- 拥有以下计时器的最简单方法
- 类中的计时器方法
- 最有效的获取计时器的方法
- 使用Boost基本截止时间计时器来调用类方法