获取时间c++

Posted

技术标签:

【中文标题】获取时间c++【英文标题】:Obtain time c++ 【发布时间】:2013-11-04 11:59:04 【问题描述】:

我正在尝试将 Windows c++ 函数转换为可移植函数。 该函数的目标是获得以秒为单位的参考 CPU 时间。 Windows功能使用QueryPerformanceCounterQueryPerformanceFrequency,不能移植到mac,所以我尝试使用std::chrono::high_resolution_clock,但是我不明白它是如何工作的。

我已有的功能如下:

double GetSeconds(void)

  double sec;
  LARGE_INTEGER Frequency, PerformanceCount;

  QueryPerformanceFrequency( &Frequency );
  QueryPerformanceCounter( &PerformanceCount );

  sec = (double)PerformanceCount.QuadPart /(double)Frequency.QuadPart;

  return(sec);

使用high_resolution_clock,我可以使用以下代码(它返回打印“Hello World”所需的时间):

std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now();
std::cout << "Hello World\n";
std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();
float a = std::chrono::duration_cast<std::chrono::seconds>(end - start).count();

但是我不明白为什么下面这行不起作用(我只是想获取开始时间点):

float a = std::chrono::duration_cast<std::chrono::seconds>(start).count();    

感谢您的帮助

【问题讨论】:

【参考方案1】:

因为start 不是一个持续时间,它是一个时间点。另请注意,std::chrono::steady_clock 与挂钟无关,因此获取其当前值本身并不能真正告诉您太多,它只是一个稳定计数的计数器。

【讨论】:

+1。有关详细信息,请参阅open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2661.htm。 Joachim Pileborg @Howard-Hinnant 感谢您的回答。但我不明白如何使用 durationtime_point 来获取当前执行时间。 @jl.da 执行时间是startend之间的持续时间。如果你想获得这些点的挂钟(即系统时间),你必须使用system_clockto_time_t或类似的。

以上是关于获取时间c++的主要内容,如果未能解决你的问题,请参考以下文章

使用 C++ 获取 Unix 时间戳

C++ chrono 获取当前时间

C++ 获取当前时间毫秒数 GetTickCount64() 获取秒级time(NULL)

c++时间戳获取和转换

C++每日一练4.获取当前系统时间系统时间戳

c和c++在windows下获取时间和计算时间差的方法总结