【发布时间】:2013-07-27 19:19:56
【问题描述】:
我正在使用 c++11 <chrono> 并且将秒数表示为双精度数。我想在这段时间内使用 c++11 休眠,但我无法理解如何将其转换为 std::this_thread::sleep_for 所需的 std::chrono::duration 对象。
const double timeToSleep = GetTimeToSleep();
std::this_thread::sleep_for(std::chrono::seconds(timeToSleep)); // cannot convert from double to seconds
我已锁定<chrono> 参考,但我觉得它相当混乱。
谢谢
编辑:
以下给出错误:
std::chrono::duration<double> duration(timeToSleep );
std::this_thread::sleep_for(duration);
错误:
c:\program files (x86)\microsoft visual studio 11.0\vc\include\chrono(749): error C2679: binary '+=' : no operator found which takes a right-hand operand of type 'const std::chrono::duration<double,std::ratio<0x01,0x01>>' (or there is no acceptable conversion)
2> c:\program files (x86)\microsoft visual studio 11.0\vc\include\chrono(166): could be 'std::chrono::duration<__int64,std::nano> &std::chrono::duration<__int64,std::nano>::operator +=(const std::chrono::duration<__int64,std::nano> &)'
2> while trying to match the argument list '(std::chrono::nanoseconds, const std::chrono::duration<double,std::ratio<0x01,0x01>>)'
2> c:\program files (x86)\microsoft visual studio 11.0\vc\include\thread(164) : see reference to function template instantiation 'xtime std::_To_xtime<double,std::ratio<0x01,0x01>>(const std::chrono::duration<double,std::ratio<0x01,0x01>> &)' being compiled
2> c:\users\johan\desktop\svn\jonsengine\jonsengine\src\window\glfw\glfwwindow.cpp(73) : see reference to function template instantiation 'void std::this_thread::sleep_for<double,std::ratio<0x01,0x01>>(const std::chrono::duration<double,std::ratio<0x01,0x01>> &)' being compiled
【问题讨论】:
-
Cornstalks 的回答是正确的。这看起来像 VS11
std::this_thread::sleep_for中的一个错误。你可以尝试std::this_thread::sleep_for(std::chrono:duration_cast<std::chrono::milliseconds>(duration))来解决这个错误。我随意选择了毫秒。使用任何可行的方法,但让<chrono>提供转化,而不是自己滚动。