I'm using c++11 <chrono>
and have a number of seconds represented as a double. I want to use c++11 to sleep for this duration, but I cannot fathom how to convert it to a std::chrono::duration
object that std::this_thread::sleep_for
requires.
const double timeToSleep = GetTimeToSleep(); std::this_thread::sleep_for(std::chrono::seconds(timeToSleep)); // cannot convert from double to seconds
I've locked at the <chrono>
reference but I find it rather confusing.
Thanks
EDIT:
The following gives error:
std::chrono::duration<double> duration(timeToSleep ); std::this_thread::sleep_for(duration);
the error:
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
Don't do std::chrono::seconds(timeToSleep)
. You want something more like:
std::chrono::duration<double>(timeToSleep)
Alternatively, if timeToSleep
is not measured in seconds, you can pass a ratio as a template parameter to duration
. See here (and the examples there) for more information.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With