이 페이지에서

QElapsedTimer Class

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

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

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

QElapsedTimer 비교

범주비교 가능한 유형
strongQElapsedTimer

공개 유형

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 의 API와 유사하므로, 해당 클래스를 사용하던 코드를 새로운 클래스로 빠르게 이식할 수 있습니다.

그러나 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() 참조). 이는 사용자가 시간을 수정하는 것과 같은 시간 조정에도 QElapsedTimer가 영향을 받지 않는다는 추가적인 이점을 제공합니다. 또한 QTime 와 달리, QElapsedTimer는 일광 절약 시간제와 같은 시간대 설정 변경의 영향을 받지 않습니다.

반면, 이는 QElapsedTimer 값을 동일한 기준 시계를 사용하는 다른 값과만 비교할 수 있음을 의미합니다. 이는 특히 기준 시간이 QElapsedTimer 객체(QElapsedTimer::msecsSinceReference()))에서 추출되어 직렬화된 경우에 해당합니다. 데이터를 수신하는 컴퓨터 노드가 데이터를 생성한 노드와 동일한지, 아니면 그 이후 재부팅되었는지 알 수 없으므로, 이러한 값은 절대로 네트워크를 통해 교환하거나 디스크에 저장해서는 안 됩니다.

그러나 동일한 참조 시계를 사용하는 경우, 동일한 컴퓨터에서 실행 중인 다른 프로세스와 값을 교환하는 것은 가능합니다. QElapsedTimer는 항상 동일한 클럭을 사용하므로, 같은 시스템 내의 다른 프로세스에서 반환된 값과 비교하는 것은 안전합니다. 다른 API에서 생성된 값과 비교할 경우, 사용된 클럭이 QElapsedTimer와 동일한지 확인해야 합니다( QElapsedTimer::clockType() 참조).

QTime, QChronoTimer 및 QDeadlineTimer도 참조하십시오 .

멤버 유형 문서

enum QElapsedTimer::ClockType

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

QElapsedTimer 특정 컴퓨터에서는 항상 동일한 클럭 유형을 사용하므로, 이 값은 프로그램의 수명 주기 동안 변경되지 않습니다. 이 값은 QElapsedTimer 를 Qt가 아닌 다른 구현체와 함께 사용할 때 동일한 기준 클럭이 사용되도록 보장하기 위해 제공됩니다.

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

시스템 시간 클럭은 순수한 실시간으로, 1970년 1월 1일 0:00 UTC부터 경과한 시간을 밀리초 단위로 나타냅니다. 이는 C 및 POSIX의 ` time ` 함수가 반환하는 값에 밀리초를 더한 것과 동일합니다. 이 시계 유형은 현재 단조로운 시계를 지원하지 않는 유닉스 시스템에서만 사용됩니다(아래 참조).

이것은 QElapsedTimer 가 사용할 수 있는 유일한 비단조 시계입니다.

MonotonicClock

이는 과거의 임의의 시점부터 경과한 시간을 밀리초 단위로 나타낸 시스템의 단조로운 시계입니다. 이 시계 유형은 POSIX 단조로운 시계(_POSIX_MONOTONIC_CLOCK)를 지원하는 유닉스 시스템에서 사용됩니다.

MachAbsoluteTime

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

이 시계는 단조적입니다.

PerformanceCounter

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

이 시계는 단조적입니다.

clockType() 및 isMonotonic()도 참조하십시오 .

[alias] QElapsedTimer::Duration

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

[alias] QElapsedTimer::TimePoint

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

멤버 함수 설명서

[constexpr noexcept default] QElapsedTimer::QElapsedTimer()

유효하지 않은 QElapsedTimer 객체를 생성합니다. 타이머는 시작되면 유효해집니다.

isValid() 및 start()도 참조하십시오 .

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

이 QElapsedTimer 구현체가 사용하는 시계 유형을 반환합니다.

Qt 6.6부터 ` QElapsedTimer `는 ` std::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

이 QElapsedTimer 와 other 사이의 시간 차이를 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부터 ` QElapsedTimer `는 ` std::chrono::steady_clock`를 사용하므로, 이 함수는 이제 항상 `true`를 반환합니다.

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부터 경과한 밀리초 수입니다(즉, 밀리초 단위로 표현된 유닉스 시간입니다).

리눅스, 윈도우 및 애플 플랫폼에서 이 값은 일반적으로 시스템 부팅 이후의 시간을 나타내지만, 시스템이 절전 상태에 있었던 시간은 포함되지 않는 경우가 많습니다.

clockType() 및 elapsed()도 참조하십시오 .

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

이 QElapsedTimer 와 other 사이의 경과 시간을 밀리초 단위로 반환합니다. 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

이 ` QElapsedTimer `와 ` other` 사이의 시간(초)을 반환합니다. ` 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)

lhs 와 rhs 에 서로 다른 시간이 포함되어 있으면 true 를 반환하고, 그렇지 않으면 false를 반환합니다.

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

lhs 가 rhs 보다 먼저 시작되었다면 ` true `를 반환하고, 그렇지 않으면 `false`를 반환합니다.

두 매개변수 중 하나는 유효하지 않고 다른 하나는 유효한 경우, 반환 값은 정의되지 않습니다. 그러나 두 타이머가 모두 유효하지 않은 경우 둘은 동일하므로 이 함수는 false를 반환합니다.

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

lhs 와 rhs 에 동일한 시간이 포함되어 있으면 ` true `를 반환하고, 그렇지 않으면 `false`를 반환합니다.

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