我知道这个问题有太多的变数可以得到一个答案,但非常感谢您帮助我们了解这些选项。
我的应用程序需要从网络接收大量事件,并且需要在到达时至少以毫秒分辨率“标记”每条消息,以便稍后根据这些时间戳执行大量计算。
我过去的经验告诉我,以高速率获取时钟时间是性能杀手,因为它们转换为系统/内核调用。在C ++的Unix环境中是否存在“最差的选项”?
作为起点我现在正在使用“boost :: posix_time :: microsec_clock :: local_time()”
,这取决于microsec分辨率(我不需要),这给了我一个绝对时间(原则上我可以使用相对于任何纪元的相对偏移)。
我最好的选择是什么?
答案 0 :(得分:2)
我不能说哪个更快,但你有没有想过你需要什么样的时间?
clock(3)
:CPU滴答声......对性能测试很有用,但不能用于计时网络呼叫或时间戳。clock_gettime(3)
CLOCK_MONOTONIC
:Unalterable time ...对timing network calls有用。gettimeofday(2)
:壁垒时间...对时间戳和性能测试很有用。确保您选择的方法适合您的需要。
答案 1 :(得分:0)
以下为您获取以微秒为单位的时间戳(您认为这对您来说太过分了)。 很容易调整除法/乘法以获得微秒:
const uint32_t getTime()
{
struct timeval tv;
struct timezone tz;
struct tm *tm;
gettimeofday(&tv, &tz);
tm = localtime(&tv.tv_sec);
return (tm->tm_hour * 3600000000/*3600 * 1000 * 1000*/) +
(tm->tm_min * 60000000/*60 * 1000 * 1000*/) +
(tm->tm_sec * 1000000/*1000 * 1000*/) +
(tv.tv_usec);
}