QueryPerformanceCounter Linux等效

时间:2012-09-17 23:12:07

标签: linux porting

经过this线程后,我了解到clock_gettime()和clock_getres()是实现QueryPerformanceCounter&的一个选项。 Linux环境中的QueryPerformanceFrequency。

许多示例建议读取clock_gettime返回的值并使用它。但那只是纳秒数而不是刻度数! 因此,在Linux中获取滴答数的唯一方法是使用clock_gettime()和amp;的组合。 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);
}

谢谢!

0 个答案:

没有答案