首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨平台微秒精密时间戳

问跨平台微秒精密时间戳
EN

Stack Overflow用户
提问于 2015-04-29 09:22:15
回答 1查看 1.3K关注 0票数 0

我正在编写一个日志类,它应该提供一个微秒精度级别的当前日期和时间。我不想使用snprintf直接格式化所有日志消息(这样就可以有效地过滤它们),而是具有如下结构:

代码语言:javascript
复制
struct log_record {
    timestamp_t time;
    uint32_t    msg_len;
    ...
}

这应该能够与其他可能有另一个cpu、os (linux和windows)等的机器共享(例如,使用tcp )。是否存在时间戳格式/库(可能在某些数据库系统中)?能满足我的要求吗?

EN

回答 1

Stack Overflow用户

发布于 2015-04-29 10:36:34

您可以在某些平台上实现微秒级的粒度,但是您不会获得微秒级的精度,因为系统时钟肯定不是那么精确。在典型的桌面机器上,预计会有几秒甚至几分钟的偏移,在使用NTP进行仔细同步的机器上,则会减少到毫秒。

在我所知道的所有Unix系统(包括Linux)上,好的旧gettimeofday产生的粒度介于10 OS到1 s之间,这取决于操作系统和硬件:

代码语言:javascript
复制
rc = gettimeofday(&tv, NULL);

在大多数Linux平台上,clock_gettime提供了更好的粒度,减少到数百纳秒:

代码语言:javascript
复制
rc = clock_gettime(CLOCK_REALTIME, &ts);

在Windows上,您需要使用GetSystemTimeAsFileTime函数,然后可以使用FileTimeToSystemTime函数将其转换为有用的结果。但是,这只会给您带来几十毫秒的粒度,除非您与性能计数器玩肮脏的把戏。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29939428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档