Я использую C++ 11 <chrono>
и имею несколько секунд, представленных как double. Я хочу использовать C++ 11 для сна в течение этой продолжительности, но я не могу понять, как его преобразовать в объект std::chrono::duration
, который требуется std::this_thread::sleep_for
.конвертировать секунды как double в std :: chrono :: duration?
const double timeToSleep = GetTimeToSleep();
std::this_thread::sleep_for(std::chrono::seconds(timeToSleep)); // cannot convert from double to seconds
Я заперт в <chrono>
ссылки, но я нахожу это довольно запутанной.
Благодаря
EDIT:
Следующая дает ошибку:
std::chrono::duration<double> duration(timeToSleep);
std::this_thread::sleep_for(duration);
ошибка:
:\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
Ответы на кукурузные камни верны. Это похоже на ошибку в VS11 'std :: this_thread :: sleep_for'. Вы можете попробовать: std :: this_thread :: sleep_for (std :: chrono: duration_cast (продолжительность)) ', чтобы обойти ошибку. Я выбрал миллисекунды произвольно. Используйте все, что угодно, но давайте '' поставляем конверсии вместо того, чтобы катиться самостоятельно. –