Obtenir un unsigned int millisecondes de chrono::durée
Pour un winapi wrapper je veux utiliser le chronomètre pour une durée donnée à l'appel. L'exemple de code:
bool setTimer(std::chrono::duration<std::chrono::milliseconds> duration)
{
unsigned int dwDuration = Do some chrono magic here
SetTimer(m_hWnd,1,dwDuration,0);
}
dwDuration doit être en millisecondes.
Première question: Comment faire de la magie.
Deuxième question: Est le paramètre déclaration d'accord?
OriginalL'auteur Martin Schlott | 2013-12-26
Vous devez vous connecter pour publier un commentaire.
Le nom du type est
std::chrono::milliseconds
, et il a une fonction de membrecount()
qui renvoie le nombre de ces millisecondes:démo en ligne: http://coliru.stacked-crooked.com/a/03f29d41e9bd260c
Si vous voulez être ultra-pédant, le type de retour de la fonction count() est
std::chrono::milliseconds::rep
Si vous voulez traiter avec des fractions de millisecondes, puis le type serait
std::chrono::duration<double, std::milli>
(et le type de retour de la fonction count() est alors double)notez que les fonctions qui prennent les durées sont généralement les modèles de fonction, paramétrées sur la durée de paramètres, par exemple std::this_thread::sleep_for(). Dans cette fonction, vous pouvez
duration_cast
de millisecondes. Votre fonction n'est exigible avec les durées qui sont implicitement convertible en millisecondes (commeseconds
)C'est intentionnellement que je veux être près de la winapi. Mais ce genre de type de paramètre proposez-vous? Ou dois-je activer la fonction dans un modèle? La cible winapi fonction bien sûr accepte uniquement millisecondes.
Dépend de l'interface que vous souhaitez. C'est votre choix selon vos exigences. Je ne pense pas qu'il y a une meilleure option. Si vous mettez en millisecondes dans l'interface, l'appelant est contraint de gérer la troncature et l'arrondissement lui-même (ce qui signifie qu'ils obtiennent de choisir); si vous mettez un modèle, vous devez choisir de le faire vous-même.
Avec mon IDE
std::chrono::milliseconds
type n'est passtd::chrono::duration<double, std::milli>
maisstd::chrono::duration<int64_t, std::milli>
OriginalL'auteur Cubbi
Vous pouvez utiliser le code suivant:
OriginalL'auteur Ivan Mushketyk