QElapsedTimer Class
La classe QElapsedTimer offre un moyen rapide de calculer les durées écoulées. En savoir plus…
| En-tête : | #include <QElapsedTimer> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
Remarque : toutes les fonctions de cette classe sont réentrantes.
Comparaisons avec QElapsedTimer
| Catégorie | Types comparables |
|---|---|
| strong | QElapsedTimer |
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 associé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; le code qui utilisait cette dernière peut donc être rapidement porté vers la nouvelle classe.
Cependant, contrairement à QTime, QElapsedTimer tente d'utiliser des horloges monotones dans la mesure du possible. Cela signifie qu'il n'est pas possible de convertir les objets QElapsedTimer en une durée lisible par l'utilisateur.
Ce type de classe est généralement utilisé pour déterminer le temps passé sur une opération lente. L'exemple le plus simple d'une telle utilisation concerne le débogage, comme dans l'exemple suivant :
QElapsedTimer timer;
timer.start();
slowOperation1();
qDebug() << "The slow operation took" << timer.elapsed() << "milliseconds";Dans cet exemple, le chronomètre est lancé par un appel à la fonction ` start()` et le temps écoulé est calculé par la fonction ` elapsed()`.
Le temps écoulé peut également servir à recalculer le temps disponible pour une autre opération, une fois la première terminée. Cela s’avère utile lorsque l’exécution doit s’achever dans un délai donné, mais que plusieurs étapes sont nécessaires. Les fonctions de type ` waitFor` présentes dans ` QIODevice ` et ses sous-classes illustrent bien ce besoin. Dans ce cas, le code pourrait se présenter comme suit :
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 opération donnée pendant une tranche de temps spécifique. Pour cela, QElapsedTimer fournit la fonction de commodité hasExpired(), qui permet de 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();
}Il est souvent plus pratique d’utiliser ` QDeadlineTimer ` dans ce cas, car cette fonction compte le temps restant jusqu’à l’expiration d’un délai plutôt que de suivre le temps écoulé.
Horloges de référence
QElapsedTimer utilisera l’horloge de référence monotone de la plateforme sur toutes les plateformes qui la prennent en charge (voir QElapsedTimer::isMonotonic()). Cela présente l’avantage supplémentaire que QElapsedTimer est insensible aux ajustements horaires, tels que la correction de l’heure par l’utilisateur. Contrairement à QTime, QElapsedTimer n’est pas affecté par les modifications des paramètres de fuseau horaire, telles que les périodes d’heure d’été.
En revanche, cela signifie que les valeurs de QElapsedTimer ne peuvent être comparées qu’à d’autres valeurs utilisant la même référence. C'est particulièrement vrai si le temps écoulé depuis la référence est extrait de l'objet QElapsedTimer (QElapsedTimer::msecsSinceReference()) puis sérialisé. Ces valeurs ne doivent jamais être échangées sur le réseau ni enregistrées sur le disque, car il est impossible de savoir si le nœud informatique recevant les données est le même que celui qui les a générées ou s'il a redémarré depuis.
Il est toutefois possible d’échanger cette 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 utilise toujours la même horloge ; il est donc sans risque de comparer sa valeur à celle provenant d’un autre processus sur la même machine. Si vous comparez ces valeurs à celles 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 pouvant être utilisés par QElapsedTimer.
QElapsedTimer utilisera toujours le même type d'horloge sur une machine donnée ; cette valeur ne changera donc pas pendant toute la durée d'exécution d'un programme. Elle est fournie afin que QElapsedTimer puisse être utilisé avec d'autres implémentations non-Qt, pour garantir que la même horloge de référence est utilisée.
| Constante | Valeur | Description |
|---|---|---|
QElapsedTimer::SystemTime | 0 | L'heure système lisible par l'utilisateur. 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 performances fourni par Windows. Cette horloge est monotone. |
SystemTime
L'horloge système correspond strictement au temps réel, exprimé en millisecondes depuis le 1er janvier 1970 à 0 h 00 UTC. Elle équivaut à la valeur renvoyée par la fonction C et POSIX ` time `, à laquelle s'ajoutent les millisecondes. Ce type d'horloge n'est actuellement utilisé que sur les systèmes Unix qui ne prennent pas en charge 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 instant arbitraire dans le passé. Ce type d’horloge est utilisé sur les systèmes Unix prenant en charge les horloges monotones POSIX (_POSIX_MONOTONIC_CLOCK).
MachAbsoluteTime
Ce type d’horloge est basé sur le temps absolu fourni par les noyaux Mach, comme 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 prendre en charge une horloge monotone POSIX dont les valeurs diffèrent du temps absolu 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 default] QElapsedTimer::QElapsedTimer()
Crée un objet `QElapsedTimer` non valide. Un minuteur devient valide une fois qu'il a été lancé.
Voir également isValid() et start().
[static noexcept] QElapsedTimer::ClockType QElapsedTimer::clockType()
Renvoie le type d'horloge utilisé par cette implémentation de ` QElapsedTimer `.
Depuis Qt 6.6, ` QElapsedTimer ` utilise ` std::chrono::steady_clock`, de sorte que le type d'horloge est toujours ` MonotonicClock`.
Voir également ` isMonotonic()`.
[noexcept, since 6.6] QElapsedTimer::Duration QElapsedTimer::durationElapsed() const
Renvoie une instance de ` std::chrono::nanoseconds ` contenant le temps écoulé depuis le dernier démarrage de cette instance de ` QElapsedTimer `.
L'appel de cette fonction sur une instance de ` QElapsedTimer ` non valide entraîne un comportement indéfini.
Sur les plateformes ne prenant pas en charge la résolution en nanosecondes, la valeur renvoyée correspondra à la meilleure estimation disponible.
Cette fonction a été introduite dans Qt 6.6.
Voir également 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é après, 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 également secsTo() et elapsed().
[noexcept] qint64 QElapsedTimer::elapsed() const
Renvoie le nombre de millisecondes écoulées depuis le dernier démarrage de cette instance de ` QElapsedTimer `.
L'appel de cette fonction sur une instance ` QElapsedTimer ` non valide entraîne un comportement indéfini.
Voir également start(), restart(), hasExpired(), isValid() et invalidate().
[noexcept] bool QElapsedTimer::hasExpired(qint64 timeout) const
Renvoie ` true ` si ` elapsed()` dépasse la valeur ` timeout` indiquée, sinon ` false`.
Une valeur négative de ` timeout ` est interprétée comme infinie ; dans ce cas, la fonction ` false ` est renvoyée. Sinon, cela revient à ` elapsed() > timeout`. Vous pouvez procéder de la même manière pour une durée en comparant ` durationElapsed()` à un délai d’expiration de durée.
Voir également elapsed() et QDeadlineTimer.
[noexcept] void QElapsedTimer::invalidate()
Marque cet objet ` QElapsedTimer ` comme non valide.
La validité d’un objet peut être vérifiée à l’aide de la fonction ` isValid()`. Les calculs du temps écoulé depuis la réception de données non valides ne sont pas définis et sont susceptibles de produire des résultats aberrants.
Voir également isValid(), start() et restart().
[static noexcept] bool QElapsedTimer::isMonotonic()
Renvoie « true » s'il s'agit d'une horloge monotone, « false » dans le cas contraire. Consultez les informations sur les différents types d'horloges pour savoir lesquels sont monotones.
Depuis Qt 6.6, ` QElapsedTimer ` utilise ` std::chrono::steady_clock`, cette fonction renvoie donc désormais toujours `true`.
Voir également ` clockType()` et ` QElapsedTimer::ClockType`.
[noexcept] bool QElapsedTimer::isValid() const
Renvoie « false » si le minuteur n'a jamais été lancé ou invalidé par un appel à la fonction ` invalidate()`.
Voir également invalidate(), start() et restart().
[noexcept] qint64 QElapsedTimer::msecsSinceReference() const
Renvoie le nombre de millisecondes écoulées entre le dernier démarrage de cet objet ` QElapsedTimer ` et le début de son horloge de référence.
Ce nombre est généralement arbitraire pour toutes les horloges, à l'exception de l'horloge de type « QElapsedTimer::SystemTime ». Pour ce type d'horloge, ce nombre correspond au nombre de millisecondes écoulées depuis le 1er janvier 1970 à 0 h 00 UTC (il s'agit donc du 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 passé par le système en état de veille.
Voir également clockType() et elapsed().
[noexcept] qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const
Renvoie le nombre de millisecondes entre cet QElapsedTimer et other. Si other a été lancé avant cet objet, la valeur renvoyée sera négative. S'il a été lancé après, la valeur renvoyé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 cette instance de ` QElapsedTimer `.
L'appel de cette fonction sur une QElapsedTimer non valide entraîne un comportement indéfini.
Sur les plateformes ne prenant pas en charge la résolution en nanosecondes, la valeur renvoyée correspondra à la meilleure estimation disponible.
Voir également start(), restart(), hasExpired() et invalidate().
[noexcept] qint64 QElapsedTimer::restart()
Redémarre le chronomètre et renvoie le nombre de millisecondes écoulées depuis le dernier démarrage. Cette fonction équivaut à obtenir le temps écoulé avec elapsed() puis à redémarrer le chronomètre avec start(), mais elle effectue ces deux opérations en une seule, évitant ainsi de devoir récupérer deux fois la valeur de l’horloge.
L'appel de cette fonction sur une valeur ` QElapsedTimer ` non valide entraîne un comportement indéfini.
L’exemple suivant illustre comment utiliser cette fonction pour calibrer un paramètre en fonction d’une opération lente (par exemple, un nombre d’itérations) afin que cette opération prenne 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 QElapsedTimer et other. Si other a été lancé avant cet objet, la valeur renvoyée sera négative. S’il a été lancé après, la valeur renvoyée sera positive.
L’appel de cette fonction sur ou avec un objet ` QElapsedTimer ` non valide entraîne un comportement indéfini.
Voir également msecsTo() et elapsed().
[noexcept] void QElapsedTimer::start()
Lance ce minuteur. Une fois lancé, la valeur du minuteur peut être consultée à l'aide de la fonction ` elapsed()` ou ` msecsSinceReference()`.
En règle générale, un minuteur est lancé juste avant une opération longue, telle que :
QElapsedTimer timer;
timer.start();
slowOperation1();
qDebug() << "The slow operation took" << timer.elapsed() << "milliseconds";De plus, le fait de démarrer un chronomètre le rend à nouveau valide.
Voir également restart(), invalidate() et elapsed().
Connexes (non-membres)
[noexcept] bool operator!=(const QElapsedTimer &lhs, const QElapsedTimer &rhs)
Renvoie « true » si « lhs » et « rhs » contiennent des heures différentes, « false » dans le cas contraire.
[noexcept] bool operator<(const QElapsedTimer &lhs, const QElapsedTimer &rhs)
Renvoie « true » si « lhs » a été lancé avant « rhs », « false » dans le cas contraire.
La valeur renvoyée est indéfinie si l'un des deux paramètres est invalide et l'autre non. Cependant, deux minuteurs invalides sont considérés comme égaux ; cette fonction renverra donc « false ».
[noexcept] bool operator==(const QElapsedTimer &lhs, const QElapsedTimer &rhs)
Renvoie « true » si « lhs » et « rhs » contiennent la même heure, « false » dans le cas contraire.
© 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.