获得时间c ++

时间:2013-11-04 11:59:04

标签: c++ c++11 time performancecounter chrono

我正在尝试将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 个答案:

答案 0 :(得分:4)

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