通过这个线程之后,我明白clock_gettime()和clock_getres()是在Linux环境中实现QueryPerformanceCounter&QueryPerformanceFrequency的一个选项。
许多示例都build议读出clock_gettime返回的值并使用它。 但是,这只是纳秒数而不是蜱的数量! 因此,在Linux中获取刻度数的唯一方法是使用clock_gettime()和clock_getres()的组合。 如果我错了,请纠正我。
所以我实现了我的QueryPerformanceCounter(看起来非常难看!)所以想知道是否有更好的方法来实现QueryPerformanceCounter for Linux。 我的代码在下面 –
__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); }
谢谢!