将 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 正确的重载。
我正在尝试使用 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 正确的重载。