将 STL 计时结果与浮点数进行比较

comparing STL chrono results with floating point

我正在尝试使用 C++ 11 中的 STL chrono 库来测量循环的持续时间。所以,我正在尝试做如下事情:

using std::chrono;

double frame_time = 40; // Temporal resolution milliseconds
auto start = high_resolution_clock::now();
while (get_frame(frame)) {
    // Do something
    auto end = high_resolution_clock::now();
    auto elapsed = duration_cast<milliseconds>(end - start);

    // Now I want to do something like:
    if (elapsed < frame_time) { sleep(frame_time-elapsed);}
    start = high_resolution_clock::now();
}

但是,该比较会导致如下错误:

 no match for ‘operator<’ (operand types are ‘std::chrono::duration<long 
                           int, std::ratio<1l, 1000l> >’ and ‘double’)

您不能比较 chrono::duration 和加倍。只需使用持续时间对象的 count 函数。

if (elapsed.count() < frame_time) 
{ 
   sleep(frame_time-elapsed.count());
}

你的frame_time也是一个时长,为什么不用std::chrono::milliseconds呢?这样你的代码就会变得更干净(一开始你不需要你的评论)和更安全,例如,如果 sleep() 被更改为使用微秒,编译器可以警告你或 select 正确的重载。