我想在C++中实现一个简单的计时器机制.该代码应该适用于Windows和Linux.分辨率应尽可能精确(至少精确到毫秒).这将用于简单地跟踪时间的流逝,而不是实现任何类型的事件驱动设计.完成此任务的最佳工具是什么?
在Windows下也有像一些方便的功能,QueryPerformanceCounter从mmsystem.h创建高分辨率定时器.Linux有类似的东西吗?
经过这个线程后,我了解到clock_gettime()和clock_getres()是在Linux环境中实现QueryPerformanceCounter和QueryPerformanceFrequency的选项.
许多示例建议读取clock_gettime返回的值并使用它.但那只是纳秒数而不是刻度数!因此,在Linux中获取滴答数的唯一方法是使用clock_gettime()和clock_getres()的组合.如果我错了,请纠正我.
所以我实现了我的QueryPerformanceCounter(它看起来非常难看!)所以想知道是否有更好的方法来实现Linux的QueryPerformanceCounter.我的代码如下 -
__int64 QueryPerformanceCounter()
{
__int64 nsec_count, nsec_per_tick;
/*
* clock_gettime() returns the number of secs. We translate that to number of nanosecs.
* clock_getres() returns number of seconds per tick. We translate that to number of nanosecs per tick.
* Number of nanosecs divided by number of nanosecs per tick - will give the number of ticks.
*/
struct timespec ts1, ts2;
if (clock_gettime(CLOCK_MONOTONIC, &ts1) != 0) {
printf("clock_gettime() failed");
return -1;
}
nsec_count = …Run Code Online (Sandbox Code Playgroud) 我确信之前已经问过这个问题所以我当然使用搜索功能检查是否有解决问题的答案.
然而,我所能找到的只是高精度测量时间的很多答案.
我需要的是一个高分辨率(至少毫秒)的计时器,它允许我在定义的时间段过去时触发回调.我想在Cocoa Mac OS X应用程序中使用它,因此可以使用C/C++或Obj-C.如果需要额外的库,那么这也很好.
我发现这个http://www.songho.ca/misc/timer/timer.html但是它使用了繁忙的等待策略,并且我认为会花费太多的性能.
非常感谢帮助!