C++,自午夜以来获得毫秒的最快方式
C++, fastest way to get milliseconds since midnight
这是经常运行并且必须快速运行的代码,因此我想就最快的实现方式获得一些意见。 请注意,我实际上需要一定程度的全毫秒分辨率(因此秒 * 1000 是不够的)。对于此项目,可以使用 Boost。
编辑:目标平台也是x64_86 CentOS5,希望能够依赖操作系统时钟,所以我也可以在不连续运行的程序中使用它。
C++有处理时间的时间库:
#include <chrono>
#include <iostream>
#include <ctime>
std::chrono::system_clock::duration duration_since_midnight() {
auto now = std::chrono::system_clock::now();
time_t tnow = std::chrono::system_clock::to_time_t(now);
tm *date = std::localtime(&tnow);
date->tm_hour = 0;
date->tm_min = 0;
date->tm_sec = 0;
auto midnight = std::chrono::system_clock::from_time_t(std::mktime(date));
return now-midnight;
}
int main()
{
auto since_midnight = duration_since_midnight();
auto hours = std::chrono::duration_cast<std::chrono::hours>(since_midnight);
auto minutes = std::chrono::duration_cast<std::chrono::minutes>(since_midnight - hours);
auto seconds = std::chrono::duration_cast<std::chrono::seconds>(since_midnight - hours - minutes);
auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(since_midnight - hours - minutes - seconds);
auto microseconds = std::chrono::duration_cast<std::chrono::microseconds>(since_midnight - hours - minutes - seconds - milliseconds);
auto nanoseconds = std::chrono::duration_cast<std::chrono::nanoseconds>(since_midnight - hours - minutes - seconds - milliseconds - microseconds);
std::cout << hours.count() << "h ";
std::cout << minutes.count() << "m ";
std::cout << seconds.count() << "s ";
std::cout << milliseconds.count() << "ms ";
std::cout << microseconds.count() << "us ";
std::cout << nanoseconds.count() << "nsn";
}
这取决于您的实现,您获得的分辨率到底是什么。VS 11 beta声称分辨率为100ns,尽管我不能说它有多准确。
11h 51m 57s 285ms 699us 600ns
Microsoft中有一篇文章"为 Windows 实现持续更新的高分辨率时间提供程序",详细介绍了如何使用QueryPerformanceCounter
来获取高分辨率时间。
例如,
我会尝试创建一个计时器来检查每秒的时间。如果到午夜的时间少于 K 秒:
while(True)
{
if (checkTime() >= MIDNIGHT))
{
break;
}
}
相关文章:
- 如何在c++中为模板函数实例创建快捷方式
- 在c代码之间共享数据的最佳方式
- 在C++中将函数压缩为两种方式
- 以螺旋方式打印矩阵的程序.(工作不好)
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 创建引用向量的优雅方式
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 不同/较旧的处理器运行c++代码的方式是否不同
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 重载方法的方式会在使用临时调用时生成编译器错误
- 在reactor中存储eventHandlers的最佳方式是什么
- 如何以优化的方式同时迭代两个间距不相等的数组
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 为什么C++有不同的变量初始化方式?
- 在AVX通道中混洗的最佳方式
- 如何重新定义MPI_FLOAT,MPI_DOUBLE以 typedef 的方式
- 如何以静态代码分析友好的方式使用 #define 防护?
- C++,自午夜以来获得毫秒的最快方式