convertir les secondes en double à std :: chrono :: duration?
Je suis à l'aide de c++11 <chrono>
et ont un certain nombre de secondes, représentée comme un double. Je veux utiliser c++11 pour dormir, pour cette durée, mais je ne peux pas imaginer comment le convertir à un std::chrono::duration
objet std::this_thread::sleep_for
exige.
const double timeToSleep = GetTimeToSleep();
std::this_thread::sleep_for(std::chrono::seconds(timeToSleep)); //cannot convert from double to seconds
J'ai bloqué à la <chrono>
référence mais je la trouve assez déroutant.
Grâce
EDIT:
La suite donne l'erreur:
std::chrono::duration<double> duration(timeToSleep );
std::this_thread::sleep_for(duration);
l'erreur:
:\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
source d'informationauteur KaiserJohaan
Vous devez vous connecter pour publier un commentaire.
Ne pas faire
std::chrono::seconds(timeToSleep)
. Vous voulez quelque chose de plus comme:Sinon, si
timeToSleep
n'est pas mesuré en secondes, vous pouvez passer d'un ratio d'un paramètre du modèle àduration
. Voir ici (et les exemples) pour plus d'informations.Faire la réponse de @tiges de maïs un peu plus générique, vous pouvez définir une fonction comme ceci:
Ceci permet de convertir une valeur de secondes de n'importe quel type primitif à un chrono de la durée. L'utiliser comme ceci: