从午夜开始以最低的延迟获得纳秒
Get nanoseconds since midnight with the lowest latency
我想获得自午夜以来的当前纳秒数,延迟最低。
我的平台是带有Clang的Linux/Centos 7。我不在乎可移植性。
我找到了这个CCD_ 1结构,但是它们除以秒/毫秒等得到结果。
我还发现了这个可以在纳秒内修改的东西:
struct timeval tv;
int msec = -1;
if (gettimeofday(&tv, NULL) == 0)
{
msec = ((tv.tv_sec % 86400) * 1000 + tv.tv_usec / 1000);
}
https://stackoverflow.com/a/10499119/997112
但他们又在使用除法有什么更快的方法可以避免模数和除法吗
我认为最快的方法是:
- 现在抓紧时间
- 将小时、分钟、秒乘以必要的纳秒,然后将当前的纳米数添加到总数中
?
没有任何硬件提供纳秒计数器;因此,必须使用提供其他功能的硬件(例如"CPU周期"(,并由某个地方的软件进行缩放。
Linux上的clock_gettime()
函数将扩展到纳秒。更重要的是(取决于安全性与性能的折衷(,这可以完全在用户空间中完成,避免调用内核API的开销(这可能比微不足道的划分至少贵10倍(。
然而;在这些尺度上,你需要非常明确你真正想要的是什么。例如闰秒的预期是什么?两台计算机可能会因为一台配置为涂抹闰秒而另一台没有而产生分歧。
再举一个例子;如果你想计算延迟(例如"latency = current_time_at_receiver - time_packet_says_it_was_sent
"(,那么2台计算机可能不同步(例如,发送方的时钟比接收方的时钟晚几秒,因此延迟最终为负(;为了解决这个问题,你可能需要一个训练阶段(有点像NTP协议(,在这个阶段,你试图估计两台计算机的时间源之间的初始差异,然后进行监测/跟踪(试图补偿任何长期漂移(。
相关文章:
- 如何仅为一个函数添加延迟
- 以在Qt中的IF语句中设置时间延迟
- 模板化类中静态成员的延迟初始化
- 在 Windows 8/10 技术中完全实时的屏幕捕获,没有延迟
- 将自定义函数传递到基抽象类中以延迟执行
- 我希望改进或要求我目前的延迟/睡眠方法。C++
- 如何在 c++ 中延迟?
- 如何测量管道延迟?
- 获取毫秒延迟的错误值
- C++异常被捕获延迟,可能导致这种情况的原因是什么?
- 我的子类的属性是延迟初始化的
- 为什么有些延迟加载 DLL 会立即使用 FFMPEG 卸载?
- 代码战士的延迟
- 为什么当通过 TCP 发送的消息速率增加时,请求-响应消息对的延迟会降低?
- C++延迟后的优化器调用函数
- 将作业传递给另一个函数,而不会延迟 arduino
- 延迟 _getch() 输入
- 为什么添加延迟会提高此多线程环境中的数据吞吐量?
- 如何延迟生成已完成的项目序列并对其进行迭代
- 从午夜开始以最低的延迟获得纳秒