QElapsedTimer Class

QElapsedTimer 클래스는 경과 시간을 빠르게 계산하는 방법을 제공합니다. 더 보기...

Header: #include <QElapsedTimer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

이 클래스는 매우 유사합니다.

참고: 이 클래스의 모든 함수는 재진입합니다.

공용 유형

enum ClockType { SystemTime, MonotonicClock, TickCounter, MachAbsoluteTime, PerformanceCounter }
Duration
TimePoint

공용 함수

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()

정적 공용 멤버

QElapsedTimer::ClockType clockType()
bool isMonotonic()
bool operator!=(const QElapsedTimer &lhs, const QElapsedTimer &rhs)
bool operator<(const QElapsedTimer &lhs, const QElapsedTimer &rhs)
bool operator==(const QElapsedTimer &lhs, const QElapsedTimer &rhs)

상세 설명

QElapsedTimer 클래스는 일반적으로 두 이벤트 사이에 경과한 시간을 빠르게 계산하는 데 사용됩니다. 이 클래스의 API는 QTime 와 유사하므로 이 클래스를 사용하던 코드를 새 클래스로 빠르게 포팅할 수 있습니다.

하지만 QTime 과는 달리 QElapsedTimer는 가능하면 단조로운 시계를 사용하려고 합니다. 즉, QElapsedTimer 객체를 사람이 읽을 수 있는 시간으로 변환할 수 없습니다.

이 클래스의 일반적인 사용 사례는 느린 작업에서 얼마나 많은 시간을 소비했는지 확인하는 것입니다. 이러한 경우의 가장 간단한 예는 다음 예제에서와 같이 디버깅 목적입니다:

    QElapsedTimer timer; timer.start();
    slowOperation1();

    qDebug() << "The slow operation took" << timer.elapsed() << "milliseconds";

이 예에서는 start() 호출로 타이머를 시작하고 elapsed() 함수를 사용하여 경과 시간을 계산합니다.

경과 시간은 첫 번째 작업이 완료된 후 다른 작업에 사용할 수 있는 시간을 다시 계산하는 데에도 사용할 수 있습니다. 이 기능은 특정 시간 내에 실행을 완료해야 하지만 여러 단계가 필요한 경우에 유용합니다. QIODevice 및 그 서브클래스의 waitFor-형 함수는 이러한 필요성을 보여주는 좋은 예입니다. 이 경우 코드는 다음과 같을 수 있습니다:

void executeSlowOperations(int timeout)
{
    QElapsedTimer timer;
    timer.start();
    slowOperation1();

    int remainingTime = timeout - timer.elapsed();
    if (remainingTime > 0)
        slowOperation2(remainingTime);
}

또 다른 사용 사례는 특정 타임슬라이스에 대해 특정 연산을 실행하는 것입니다. 이를 위해 QElapsedTimer는 특정 밀리초가 이미 경과했는지 확인하는 데 사용할 수 있는 hasExpired() 편의 함수를 제공합니다:

void executeOperationsForTime(int ms)
{
    QElapsedTimer timer;
    timer.start();

    while (!timer.hasExpired(ms))
        slowOperation1();
}

이 경우 경과 시간을 추적하는 대신 앞으로의 시간 초과를 계산하는 QDeadlineTimer 을 사용하는 것이 더 편리할 때가 많습니다.

참조 시계

QElapsedTimer는 이를 지원하는 모든 플랫폼에서 플랫폼의 단조로운 기준 시계를 사용합니다( QElapsedTimer::isMonotonic() 참조). 이는 사용자가 시간을 수정하는 등의 시간 조정에 영향을 받지 않는다는 추가적인 이점이 있습니다. 또한 QTime 과 달리 QElapsedTimer는 일광 절약 시간제와 같은 시간대 설정의 변경에 영향을 받지 않습니다.

반면에 QElapsedTimer 값은 동일한 참조를 사용하는 다른 값과만 비교할 수 있습니다. 특히 QElapsedTimer 객체(QElapsedTimer::msecsSinceReference())에서 참조를 추출하여 직렬화한 이후 시간을 비교하는 경우 더욱 그렇습니다. 이러한 값은 데이터를 수신하는 컴퓨터 노드가 데이터를 생성한 노드와 동일한지 또는 그 이후 재부팅되었는지 알 수 없으므로 네트워크를 통해 교환하거나 디스크에 저장해서는 안 됩니다.

그러나 동일한 컴퓨터에서 실행 중인 다른 프로세스도 동일한 기준 클럭을 사용한다면 값을 교환할 수 있습니다. QElapsedTimer는 항상 동일한 클럭을 사용하므로 같은 머신의 다른 프로세스에서 생성된 값과 비교해도 안전합니다. 다른 API에서 생성된 값과 비교하는 경우, 사용된 클럭이 QElapsedTimer와 동일한지 확인해야 합니다( QElapsedTimer::clockType() 참조).

QTime, QChronoTimer, QDeadlineTimer도 참조하세요 .

멤버 유형 문서

enum QElapsedTimer::ClockType

이 열거형에는 QElapsedTimer 에서 사용할 수 있는 다양한 시계 유형이 포함되어 있습니다.

QElapsedTimer 는 특정 머신에서 항상 동일한 클럭 유형을 사용하므로 이 값은 프로그램 수명 동안 변경되지 않습니다. 이 인수는 Qt XML이 아닌 다른 구현에서 QElapsedTimer 을 사용하여 동일한 참조 클럭이 사용되도록 보장하기 위해 제공됩니다.

Constant설명
QElapsedTimer::SystemTime0사람이 읽을 수 있는 시스템 시간입니다. 이 시계는 단조롭지 않습니다.
QElapsedTimer::MonotonicClock1일반적으로 유닉스 시스템에서 볼 수 있는 시스템의 단조 시계입니다. 이 시계는 단조롭습니다.
QElapsedTimer::TickCounter2더 이상 사용되지 않습니다.
QElapsedTimer::MachAbsoluteTime3마하 커널의 절대 시간(macOS 및 iOS). 이 시계는 단조롭습니다.
QElapsedTimer::PerformanceCounter4Windows에서 제공하는 성능 카운터입니다. 이 시계는 단조롭습니다.
시스템 시간

시스템 시간 시계는 1970년 1월 1일 0:00 UTC부터 밀리초 단위로 표시되는 순전히 실제 시간입니다. 이 값은 밀리초가 추가된 C 및 POSIX time 함수가 반환하는 값과 동일합니다. 이 시계 유형은 현재 단조로운 클럭을 지원하지 않는 Unix 시스템에서만 사용됩니다(아래 참조).

이것은 QElapsedTimer 에서 사용할 수 있는 유일한 비모노토닉 시계입니다.

모노토닉 클록

과거의 임의의 시점부터 밀리초 단위로 표시되는 시스템의 단조 시계입니다. 이 시계 유형은 POSIX 단조 시계(_POSIX_MONOTONIC_CLOCK)를 지원하는 Unix 시스템에서 사용됩니다.

마하 절대 시간

이 시계 유형은 macOS에서 볼 수 있는 것과 같이 마하 커널에서 제공하는 절대 시간을 기반으로 합니다. 이 시계 유형은 macOS 및 iOS도 유닉스 시스템이며 마하 절대 시간과 다른 값을 가진 POSIX 단조 시계를 지원할 수 있으므로 MonotonicClock과 별도로 표시됩니다.

이 시계는 단조 시계입니다.

PerformanceCounter

이 시계는 Windows 함수 QueryPerformanceCounterQueryPerformanceFrequency 을 사용하여 시스템의 성능 카운터에 액세스합니다.

이 시계는 단조롭습니다.

clockType() 및 isMonotonic()도 참조하세요 .

[alias] QElapsedTimer::Duration

std::chrono::nanoseconds 의 동의어 .

[alias] QElapsedTimer::TimePoint

std::chrono::time_point<std::chrono::steady_clock, Duration> 의 동의어.

멤버 함수 문서

[constexpr noexcept] QElapsedTimer::QElapsedTimer()

유효하지 않은 QElapsedTimer를 생성합니다. 타이머는 일단 시작되면 유효합니다.

isValid() 및 start()도 참조하세요 .

[static noexcept] QElapsedTimer::ClockType QElapsedTimer::clockType()

QElapsedTimer 구현이 사용하는 시계 타입을 반환합니다.

Qt 6.6부터 QElapsedTimerstd::chrono::steady_clock 을 사용하므로, 클럭 유형은 항상 MonotonicClock 입니다.

isMonotonic()도 참조하십시오 .

[noexcept, since 6.6] QElapsedTimer::Duration QElapsedTimer::durationElapsed() const

QElapsedTimer 이 마지막으로 시작된 이후 시간이 포함된 std::chrono::nanoseconds 을 반환합니다.

유효하지 않은 QElapsedTimer 에서 이 함수를 호출하면 정의되지 않은 동작이 발생합니다.

나노초 해상도를 제공하지 않는 플랫폼에서는 반환되는 값이 가장 좋은 추정치입니다.

이 함수는 Qt 6.6에 도입되었습니다.

start(), restart(), hasExpired() 및 invalidate()도 참조하세요 .

[noexcept, since 6.6] QElapsedTimer::Duration QElapsedTimer::durationTo(const QElapsedTimer &other) const

QElapsedTimerother 사이의 시간 차이를 std::chrono::nanoseconds 로 반환합니다. other 이 객체보다 먼저 시작된 경우 반환되는 값은 음수가 됩니다. 나중에 시작된 경우 반환되는 값은 양수입니다.

이 객체나 other 가 무효화되면 반환값은 정의되지 않습니다.

이 함수는 Qt 6.6에 도입되었습니다.

secsTo() 및 elapsed()도 참조하세요 .

[noexcept] qint64 QElapsedTimer::elapsed() const

QElapsedTimer 이 마지막으로 시작된 이후 밀리초를 반환합니다.

유효하지 않은 QElapsedTimer 에서 이 함수를 호출하면 정의되지 않은 동작이 발생합니다.

start(), restart(), hasExpired(), isValid() 및 invalidate()도 참조하세요 .

[noexcept] bool QElapsedTimer::hasExpired(qint64 timeout) const

elapsed()이 주어진 timeout 을 초과하면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

음수 timeout 는 무한대로 해석되므로 이 경우 false 이 반환됩니다. 그렇지 않으면 elapsed() > timeout 와 같습니다. durationElapsed()를 기간 타임아웃과 비교하여 기간에 대해 동일한 작업을 수행할 수 있습니다.

elapsed() 및 QDeadlineTimer도 참조하세요 .

[noexcept] void QElapsedTimer::invalidate()

QElapsedTimer 개체를 유효하지 않은 것으로 표시합니다.

유효하지 않은 객체는 isValid()로 확인할 수 있습니다. 유효하지 않은 데이터가 정의되지 않았기 때문에 타이머 경과 시간을 계산하면 이상한 결과가 나올 수 있습니다.

isValid(), start() 및 restart()도 참조하세요 .

[static noexcept] bool QElapsedTimer::isMonotonic()

단조로운 시계인 경우 true 을 반환하고, 그렇지 않으면 false를 반환합니다. 어떤 시계가 단조로운지 이해하려면 다양한 시계 유형에 대한 정보를 참조하십시오.

Qt 6.6부터 QElapsedTimerstd::chrono::steady_clock 을 사용하므로 이제 이 함수는 항상 참을 반환합니다.

clockType() 및 QElapsedTimer::ClockType도 참조하십시오 .

[noexcept] bool QElapsedTimer::isValid() const

타이머가 시작되지 않았거나 invalidate() 호출에 의해 무효화된 경우 false 을 반환합니다.

invalidate(), start() 및 restart()도 참조하세요 .

[noexcept] qint64 QElapsedTimer::msecsSinceReference() const

QElapsedTimer 객체가 마지막으로 시작된 시간과 참조 시계가 시작된 시간 사이의 밀리초 수를 반환합니다.

이 숫자는 일반적으로 QElapsedTimer::SystemTime 시계를 제외한 모든 시계에서 임의의 값입니다. 해당 시계 유형의 경우 이 숫자는 1970년 1월 1일 0:00 UTC 이후의 밀리초 수입니다(즉, 밀리초로 표시된 유닉스 시간입니다).

Linux, Windows 및 Apple 플랫폼에서 이 값은 일반적으로 시스템 부팅 이후의 시간이지만, 일반적으로 시스템이 절전 상태에서 보낸 시간은 포함되지 않습니다.

clockType() 및 elapsed()도 참조하세요 .

[noexcept] qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const

QElapsedTimerother 사이의 밀리초 수를 반환합니다. other 가 이 객체보다 먼저 시작된 경우 반환되는 값은 음수가 됩니다. 나중에 시작된 경우 반환되는 값은 양수입니다.

이 객체 또는 other 이 무효화된 경우 반환 값은 정의되지 않습니다.

secsTo() 및 elapsed()도 참조하세요 .

[noexcept] qint64 QElapsedTimer::nsecsElapsed() const

QElapsedTimer 이 마지막으로 시작된 후 나노초를 반환합니다.

유효하지 않은 QElapsedTimer 에서 이 함수를 호출하면 정의되지 않은 동작이 발생합니다.

나노초 해상도를 제공하지 않는 플랫폼에서는 반환되는 값이 가장 좋은 추정치입니다.

start(), restart(), hasExpired() 및 invalidate()도 참조하세요 .

[noexcept] qint64 QElapsedTimer::restart()

타이머를 다시 시작하고 이전 시작 이후 경과한 시간(밀리초)을 반환합니다. 이 함수는 elapsed()로 경과 시간을 구한 다음 start()로 타이머를 다시 시작하는 것과 동일하지만, 한 번의 작업으로 수행하므로 시계 값을 두 번 구할 필요가 없습니다.

유효하지 않은 QElapsedTimer 에서 이 함수를 호출하면 정의되지 않은 동작이 발생합니다.

다음 예는 이 함수를 사용하여 매개변수를 느린 연산(예: 반복 횟수)으로 보정하여 이 연산에 최소 250밀리초가 걸리도록 하는 방법을 보여 줍니다:

    QElapsedTimer timer;

    int count = 1;
    timer.start();
    do {
        count *= 2;
        slowOperation2(count);
    } while (timer.restart() < 250);

    return count;

start(), invalidate(), elapsed() 및 isValid()도 참조하세요 .

[noexcept] qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const

QElapsedTimerother 사이의 시간(초)을 반환합니다. other 이 객체보다 먼저 시작된 경우 반환되는 값은 음수가 됩니다. 나중에 시작된 경우 반환되는 값은 양수가 됩니다.

유효하지 않은 QElapsedTimer 에서 이 함수를 호출하면 정의되지 않은 동작이 발생합니다.

msecsTo() 및 elapsed()도 참조하세요 .

[noexcept] void QElapsedTimer::start()

이 타이머를 시작합니다. 시작되면 elapsed() 또는 msecsSinceReference()로 타이머 값을 확인할 수 있습니다.

일반적으로 타이머는 다음과 같이 긴 작업 직전에 시작됩니다:

    QElapsedTimer timer; timer.start();
    slowOperation1();

    qDebug() << "The slow operation took" << timer.elapsed() << "milliseconds";

또한 타이머를 시작하면 다시 유효하게 됩니다.

restart(), invalidate() 및 elapsed()도 참조하세요 .

관련 비회원

[noexcept] bool operator!=(const QElapsedTimer &lhs, const QElapsedTimer &rhs)

lhsrhs 이 다른 시간을 포함하면 true 을 반환하고, 그렇지 않으면 거짓을 반환합니다.

[noexcept] bool operator<(const QElapsedTimer &lhs, const QElapsedTimer &rhs)

lhsrhs 보다 먼저 시작된 경우 true 을 반환하고, 그렇지 않으면 false를 반환합니다.

두 매개변수 중 하나가 유효하지 않고 다른 하나가 유효하지 않은 경우 반환되는 값은 정의되지 않습니다. 그러나 유효하지 않은 두 타이머가 같으면 이 함수는 false를 반환합니다.

[noexcept] bool operator==(const QElapsedTimer &lhs, const QElapsedTimer &rhs)

lhsrhs 에 같은 시간이 포함되어 있으면 true 을 반환하고, 그렇지 않으면 false 를 반환합니다.

© 2025 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.