Конвертировать секунды как double в std:: chrono:: duration?

Я использую С++ 11 <chrono> и имею несколько секунд, представленных как double. Я хочу использовать С++ 11 для этой продолжительности, но я не могу понять, как его преобразовать в объект std::chrono::duration, который требуется std::this_thread::sleep_for.

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

Ответы

Ответ 1

Не выполняйте std::chrono::seconds(timeToSleep). Вы хотите что-то большее:

std::chrono::duration<double>(timeToSleep)

В качестве альтернативы, если timeToSleep не измеряется в секундах, вы можете передать отношение в качестве параметра шаблона к duration. См. здесь (и примеры там) для получения дополнительной информации.

Ответ 2

const unsigned long timeToSleep = static_cast<unsigned long>( GetTimeToSleep() * 1000 );
std::this_thread::sleep_for(std::chrono::milliseconds(timeToSleep));

Ответ 3

std::chrono::milliseconds duration(timeToSleep);
std::this_thread::sleep_for( duration );