![](/img/trans.png)
[英]How does std::chrono::steady_clock::now report errors?
[英]Getting Microseconds time from std::chrono::steady_clock::now() since processor power-up
自处理器启动以来,我试图以毫秒为单位获取时间,
自从时代开始,我已经看过很多帖子,但是自上电以来我需要时间
我也试图获取一个较长的时间,而不是time_point。
从time_point转换为long int的最佳和最快方法是什么?
最后,我不确定boost :: steady_clock和std :: steady_clock之间有什么区别,
感谢:D
我不知道在Linux下可以使正常运行时间达到微秒级分辨率的机制,但是sysinfo提供了一种简单的机制来以秒级分辨率进行检索:
#include <sys/sysinfo.h>
struct sysinfo info;
if( sysinfo( &info ) != 0 )
{
// handle the failure
}
// uptime in seconds is available (as a long) in info.uptime
我假设从time_point
到long
转换现在不相关,但是时间点表示特定的时间点,而不是从参考点开始经过的时间长度。 要从起点开始转换为多个时间单位,您需要将其转换为持续时间(减去起点),然后使用duration_cast
进行转换以转换为您选择的单位。 例如:
using namespace std::chrono; // for brevity in the example code.
auto elapsed = duration_cast<milliseconds>( timepoint1 - reftimepoint ).count()
boost::steady_clock
是C ++标准库中包含std::steady_clock
之前存在的实现。 除非您处理的是旧代码库,或者需要移植到不支持C ++ 11的编译器或平台,否则我认为您现在不需要使用boost::steady_clock
了。
我已经验证了以下C函数,您也可以在C ++中使用它。
#include <stdio.h>
#include <time.h>
int main(int argc, char* argv[]) {
struct timespec t;
clock_gettime(CLOCK_MONOTONIC, &t);
printf("tv_sec=%llu tv_nsec=%llu\n",
(unsigned long long)t.tv_sec,
(unsigned long long)t.tv_nsec);
return 0;
}
当我运行以上代码与系统正常运行时间进行比较时,它们几乎相同。
rajg@rajg-LinuxVM:~/Desktop/WinShare$ cat /proc/uptime && ./time
52.46 2.88
tv_sec=52 tv_nsec=468791899
rajg@rajg-LinuxVM:~/Desktop/WinShare$ cat /proc/uptime && ./time
61.08 2.88
tv_sec=61 tv_nsec=81561476
rajg@rajg-LinuxVM:~/Desktop/WinShare$ cat /proc/uptime && ./time
63.97 2.88
tv_sec=63 tv_nsec=979358440
rajg@rajg-LinuxVM:~/Desktop/WinShare$ cat /proc/uptime && ./time
65.05 2.88
tv_sec=65 tv_nsec=52160586
rajg@rajg-LinuxVM:~/Desktop/WinShare$ cat /proc/uptime && ./time
75.44 12.47
tv_sec=75 tv_nsec=448578284
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.