QElapsedTimer Class
La classe QElapsedTimer permet de calculer rapidement les temps écoulés. Plus d'informations...
| En-tête : | #include <QElapsedTimer> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
Cette classe est fortement comparable.
Remarque : toutes les fonctions de cette classe sont réentrantes.
Types publics
| enum | ClockType { SystemTime, MonotonicClock, TickCounter, MachAbsoluteTime, PerformanceCounter } |
| Duration | |
| TimePoint |
Fonctions publiques
| QElapsedTimer() | |
(since 6.6) QElapsedTimer::Duration | durationElapsed() const |
(since 6.6) QElapsedTimer::Duration | durationTo(const QElapsedTimer &other) const |
| qint64 | elapsed() const |
| bool | hasExpired(qint64 timeout) const |
| void | invalidate() |
| bool | isValid() const |
| qint64 | msecsSinceReference() const |
| qint64 | msecsTo(const QElapsedTimer &other) const |
| qint64 | nsecsElapsed() const |
| qint64 | restart() |
| qint64 | secsTo(const QElapsedTimer &other) const |
| void | start() |
Membres publics statiques
| QElapsedTimer::ClockType | clockType() |
| bool | isMonotonic() |
Non-membres apparentés
| bool | operator!=(const QElapsedTimer &lhs, const QElapsedTimer &rhs) |
| bool | operator<(const QElapsedTimer &lhs, const QElapsedTimer &rhs) |
| bool | operator==(const QElapsedTimer &lhs, const QElapsedTimer &rhs) |
Description détaillée
La classe QElapsedTimer est généralement utilisée pour calculer rapidement le temps écoulé entre deux événements. Son API est similaire à celle de QTime, de sorte que le code qui l'utilisait peut être rapidement porté vers la nouvelle classe.
Cependant, contrairement à QTime, QElapsedTimer essaie d'utiliser des horloges monotones si possible. Cela signifie qu'il n'est pas possible de convertir les objets QElapsedTimer en une heure lisible par l'homme.
Le cas d'utilisation typique de la classe est de déterminer le temps passé lors d'une opération lente. L'exemple le plus simple est celui du débogage, comme dans l'exemple suivant :
QElapsedTimer timer ; timer.start() ; slowOperation1(); qDebug() << "The slow operation took" << timer.elapsed() << "milliseconds";
Dans cet exemple, la minuterie est démarrée par un appel à start() et le temps écoulé est calculé par la fonction elapsed().
Le temps écoulé peut également être utilisé pour recalculer le temps disponible pour une autre opération, une fois la première terminée. Cette fonction est utile lorsque l'exécution doit se terminer dans un certain délai, mais que plusieurs étapes sont nécessaires. Les fonctions de type waitFor dans QIODevice et ses sous-classes sont de bons exemples de ce type de besoin. Dans ce cas, le code pourrait être le suivant :
void executeSlowOperations(int timeout) { QElapsedTimer timer; timer.start(); slowOperation1(); int remainingTime = timeout - timer.elapsed(); if (remainingTime > 0) slowOperation2(remainingTime); }
Un autre cas d'utilisation consiste à exécuter une certaine opération pendant une tranche de temps spécifique. Pour cela, QElapsedTimer fournit la fonction de commodité hasExpired(), qui peut être utilisée pour déterminer si un certain nombre de millisecondes s'est déjà écoulé :
void executeOperationsForTime(int ms) { QElapsedTimer timer; timer.start(); while (!timer.hasExpired(ms)) slowOperation1(); }
Dans ce cas, il est souvent plus pratique d'utiliser QDeadlineTimer, qui comptabilise un délai d'attente dans le futur au lieu de suivre le temps écoulé.
Horloges de référence
QElapsedTimer utilisera l'horloge de référence monotone de la plate-forme sur toutes les plates-formes qui la supportent (voir QElapsedTimer::isMonotonic()). Cela présente l'avantage supplémentaire que QElapsedTimer est immunisé contre les ajustements de temps, tels que la correction de l'heure par l'utilisateur. De même, contrairement à QTime, QElapsedTimer est insensible aux modifications des paramètres du fuseau horaire, comme les périodes d'économie d'énergie.
D'un autre côté, cela signifie que les valeurs de QElapsedTimer ne peuvent être comparées qu'à d'autres valeurs utilisant la même référence. Cela est particulièrement vrai si le temps écoulé depuis la référence est extrait de l'objet QElapsedTimer (QElapsedTimer::msecsSinceReference()) et sérialisé. Ces valeurs ne doivent jamais être échangées sur le réseau ou sauvegardées sur disque, car il est impossible de savoir si le nœud informatique qui reçoit les données est le même que celui qui les a émises ou s'il a redémarré depuis.
Il est toutefois possible d'échanger la valeur avec d'autres processus s'exécutant sur la même machine, à condition qu'ils utilisent également la même horloge de référence. QElapsedTimer utilisera toujours la même horloge, il est donc sûr de comparer avec la valeur provenant d'un autre processus sur la même machine. Si vous comparez avec des valeurs produites par d'autres API, vous devez vérifier que l'horloge utilisée est la même que celle de QElapsedTimer (voir QElapsedTimer::clockType()).
Voir également QTime, QChronoTimer, et QDeadlineTimer.
Documentation sur les types de membres
enum QElapsedTimer::ClockType
Cette énumération contient les différents types d'horloge que QElapsedTimer peut utiliser.
QElapsedTimer utilisera toujours le même type d'horloge dans une machine particulière, de sorte que cette valeur ne changera pas au cours de la durée de vie d'un programme. Elle est fournie pour que QElapsedTimer puisse être utilisé avec d'autres implémentations non-Qt XML, afin de garantir que la même horloge de référence est utilisée.
| Constante | Valeur | Description de la constante |
|---|---|---|
QElapsedTimer::SystemTime | 0 | L'heure du système lisible par l'homme. Cette horloge n'est pas monotone. |
QElapsedTimer::MonotonicClock | 1 | L'horloge monotone du système, que l'on trouve généralement dans les systèmes Unix. Cette horloge est monotone. |
QElapsedTimer::TickCounter | 2 | N'est plus utilisée. |
QElapsedTimer::MachAbsoluteTime | 3 | L'heure absolue du noyau Mach (macOS et iOS). Cette horloge est monotone. |
QElapsedTimer::PerformanceCounter | 4 | Le compteur de performance fourni par Windows. Cette horloge est monotone. |
HeureSystème
L'horloge SystemTime est purement le temps réel, exprimé en millisecondes depuis le 1er janvier 1970 à 0:00 UTC. Elle est équivalente à la valeur retournée par la fonction C et POSIX time, avec les millisecondes ajoutées. Ce type d'horloge n'est actuellement utilisé que sur les systèmes Unix qui ne supportent pas les horloges monotones (voir ci-dessous).
C'est la seule horloge non monotone que QElapsedTimer peut utiliser.
MonotonicClock
Il s'agit de l'horloge monotone du système, exprimée en millisecondes depuis un point arbitraire dans le passé. Ce type d'horloge est utilisé sur les systèmes Unix qui prennent en charge les horloges monotones POSIX (_POSIX_MONOTONIC_CLOCK).
MachAbsoluteTime
Ce type d'horloge est basé sur l'heure absolue présentée par les noyaux Mach, tels que ceux que l'on trouve sur macOS. Ce type d'horloge est présenté séparément de MonotonicClock car macOS et iOS sont également des systèmes Unix et peuvent supporter une horloge monotone POSIX avec des valeurs différentes de l'heure absolue Mach.
Cette horloge est monotone.
PerformanceCounter
Cette horloge utilise les fonctions Windows QueryPerformanceCounter et QueryPerformanceFrequency pour accéder au compteur de performances du système.
Cette horloge est monotone.
Voir également clockType() et isMonotonic().
[alias] QElapsedTimer::Duration
Synonyme de std::chrono::nanoseconds.
[alias] QElapsedTimer::TimePoint
Synonyme de std::chrono::time_point<std::chrono::steady_clock, Duration>.
Documentation sur les fonctions membres
[constexpr noexcept] QElapsedTimer::QElapsedTimer()
Construit un QElapsedTimer invalide. Un timer devient valide une fois qu'il a été démarré.
Voir aussi isValid() et start().
[static noexcept] QElapsedTimer::ClockType QElapsedTimer::clockType()
Renvoie le type d'horloge utilisé par l'implémentation de QElapsedTimer.
Depuis Qt 6.6, QElapsedTimer utilise std::chrono::steady_clock, donc le type d'horloge est toujours MonotonicClock.
Voir aussi isMonotonic().
[noexcept, since 6.6] QElapsedTimer::Duration QElapsedTimer::durationElapsed() const
Retourne un std::chrono::nanoseconds avec le temps écoulé depuis le dernier démarrage de ce QElapsedTimer.
L'appel de cette fonction à un QElapsedTimer invalide entraîne un comportement indéfini.
Sur les plates-formes qui n'offrent pas de résolution en nanosecondes, la valeur renvoyée sera la meilleure estimation disponible.
Cette fonction a été introduite dans Qt 6.6.
Voir aussi start(), restart(), hasExpired(), et invalidate().
[noexcept, since 6.6] QElapsedTimer::Duration QElapsedTimer::durationTo(const QElapsedTimer &other) const
Renvoie la différence de temps entre cet objet QElapsedTimer et other sous la forme d'un std::chrono::nanoseconds. Si other a été lancé avant cet objet, la valeur renvoyée sera négative. S'il a été lancé plus tard, la valeur renvoyée sera positive.
La valeur de retour est indéfinie si cet objet ou other ont été invalidés.
Cette fonction a été introduite dans Qt 6.6.
Voir aussi secsTo() et elapsed().
[noexcept] qint64 QElapsedTimer::elapsed() const
Renvoie le nombre de millisecondes écoulées depuis le dernier démarrage de QElapsedTimer.
L'appel de cette fonction à un QElapsedTimer invalide entraîne un comportement indéfini.
Voir aussi start(), restart(), hasExpired(), isValid() et invalidate().
[noexcept] bool QElapsedTimer::hasExpired(qint64 timeout) const
Renvoie true si elapsed() dépasse timeout, sinon false.
Une valeur négative de timeout est interprétée comme infinie, et false est donc renvoyé dans ce cas. Sinon, c'est équivalent à elapsed() > timeout. Vous pouvez faire la même chose pour une durée en comparant durationElapsed() à un délai d'attente de durée.
Voir aussi elapsed() et QDeadlineTimer.
[noexcept] void QElapsedTimer::invalidate()
Marque cet objet QElapsedTimer comme invalide.
Un objet invalide peut être vérifié avec isValid(). Les calculs du temps écoulé depuis les données invalides ne sont pas définis et produiront probablement des résultats étranges.
Voir aussi isValid(), start() et restart().
[static noexcept] bool QElapsedTimer::isMonotonic()
Retourne true s'il s'agit d'une horloge monotone, false sinon. Voir les informations sur les différents types d'horloge pour comprendre lesquels sont monotones.
Depuis Qt 6.6, QElapsedTimer utilise std::chrono::steady_clock, donc cette fonction renvoie toujours true.
Voir aussi clockType() et QElapsedTimer::ClockType.
[noexcept] bool QElapsedTimer::isValid() const
Retourne false si le timer n'a jamais été démarré ou invalidé par un appel à invalidate().
Voir aussi invalidate(), start() et restart().
[noexcept] qint64 QElapsedTimer::msecsSinceReference() const
Renvoie le nombre de millisecondes entre le dernier démarrage de cet objet QElapsedTimer et le démarrage de son horloge de référence.
Ce nombre est généralement arbitraire pour toutes les horloges, à l'exception de l'horloge QElapsedTimer::SystemTime. Pour ce type d'horloge, ce nombre est le nombre de millisecondes depuis le 1er janvier 1970 à 0:00 UTC (c'est-à-dire le temps Unix exprimé en millisecondes).
Sur les plateformes Linux, Windows et Apple, cette valeur correspond généralement au temps écoulé depuis le démarrage du système, bien qu'elle n'inclue généralement pas le temps que le système a passé en état de veille.
Voir également clockType() et elapsed().
[noexcept] qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const
Renvoie le nombre de millisecondes entre cet objet QElapsedTimer et other. Si other a été lancé avant cet objet, la valeur renvoyée sera négative. S'il a été démarré plus tard, la valeur retournée sera positive.
La valeur renvoyée est indéfinie si cet objet ou other ont été invalidés.
Voir également secsTo() et elapsed().
[noexcept] qint64 QElapsedTimer::nsecsElapsed() const
Renvoie le nombre de nanosecondes écoulées depuis le dernier démarrage de QElapsedTimer.
L'appel de cette fonction sur un site QElapsedTimer invalide entraîne un comportement indéfini.
Sur les plates-formes qui n'offrent pas de résolution en nanosecondes, la valeur renvoyée sera la meilleure estimation disponible.
Voir aussi start(), restart(), hasExpired() et invalidate().
[noexcept] qint64 QElapsedTimer::restart()
Redémarre la minuterie et renvoie le nombre de millisecondes écoulées depuis le démarrage précédent. Cette fonction est équivalente à l'obtention du temps écoulé avec elapsed() et au redémarrage de la minuterie avec start(), mais elle le fait en une seule opération, ce qui évite d'avoir à obtenir deux fois la valeur de l'horloge.
L'appel de cette fonction sur un site QElapsedTimer invalide entraîne un comportement indéfini.
L'exemple suivant montre comment utiliser cette fonction pour calibrer un paramètre d'une opération lente (par exemple, un nombre d'itérations) afin que cette opération dure au moins 250 millisecondes :
QElapsedTimer timer; int count = 1; timer.start(); do { count *= 2; slowOperation2(count); } while (timer.restart() < 250); return count;
Voir également start(), invalidate(), elapsed() et isValid().
[noexcept] qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const
Renvoie le nombre de secondes entre cet objet QElapsedTimer et other. Si other a été lancé avant cet objet, la valeur renvoyée sera négative. S'il a été lancé plus tard, la valeur renvoyée sera positive.
L'appel de cette fonction sur ou avec un QElapsedTimer invalide entraîne un comportement non défini.
Voir également msecsTo() et elapsed().
[noexcept] void QElapsedTimer::start()
Démarre cette minuterie. Une fois lancée, la valeur de la minuterie peut être vérifiée à l'aide de elapsed() ou msecsSinceReference().
Normalement, une minuterie est lancée juste avant une longue opération, comme par exemple :
QElapsedTimer timer ; timer.start() ; slowOperation1(); qDebug() << "The slow operation took" << timer.elapsed() << "milliseconds";
En outre, le démarrage d'un minuteur le rend à nouveau valide.
Voir également restart(), invalidate() et elapsed().
Non-membres apparentés
[noexcept] bool operator!=(const QElapsedTimer &lhs, const QElapsedTimer &rhs)
Renvoie true si lhs et rhs contiennent des heures différentes, false sinon.
[noexcept] bool operator<(const QElapsedTimer &lhs, const QElapsedTimer &rhs)
Renvoie true si lhs a été lancé avant rhs, false sinon.
La valeur renvoyée est indéfinie si l'un des deux paramètres est invalide et que l'autre ne l'est pas. Cependant, deux minuteries non valides sont égales et cette fonction renvoie donc false.
[noexcept] bool operator==(const QElapsedTimer &lhs, const QElapsedTimer &rhs)
Renvoie true si lhs et rhs contiennent la même heure, false sinon.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.