经过这个线程后,我了解到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 = ts1.tv_nsec + ts1.tv_sec * nsec_per_sec;
if (clock_getres(CLOCK_MONOTONIC, &ts2) != 0) {
LOG_ERROR("clock_getres() failed");
return -1;
}
nsec_per_tick = ts2.tv_nsec + ts2.tv_sec * nsec_per_sec;
return (nsec_count / nsec_per_tick);
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
| 归档时间: |
|
| 查看次数: |
7357 次 |
| 最近记录: |