QChronoTimer Class

QChronoTimer 클래스는 반복 및 단일 샷 타이머를 제공합니다. 더 보기...

Header: #include <QChronoTimer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
이후: Qt 6.8
상속합니다: QObject

속성

공용 기능

QChronoTimer(QObject *parent = nullptr)
QChronoTimer(std::chrono::nanoseconds nsec, QObject *parent = nullptr)
virtual ~QChronoTimer() override
QBindable<bool> bindableActive()
QBindable<std::chrono::nanoseconds> bindableInterval()
QBindable<bool> bindableSingleShot()
QBindable<Qt::TimerType> bindableTimerType()
QMetaObject::Connection callOnTimeout(const QObject *context, Functor &&slot, Qt::ConnectionType connectionType = Qt::AutoConnection)
Qt::TimerId id() const
std::chrono::nanoseconds interval() const
bool isActive() const
bool isSingleShot() const
std::chrono::nanoseconds remainingTime() const
void setInterval(std::chrono::nanoseconds nsec)
void setSingleShot(bool singleShot)
void setTimerType(Qt::TimerType atype)
Qt::TimerType timerType() const

공용 슬롯

void start()
void stop()

신호

void timeout()

재구현된 보호 기능

virtual void timerEvent(QTimerEvent *e) override

상세 설명

QChronoTimer 클래스는 타이머를 위한 하이 레벨 프로그래밍 인터페이스를 제공합니다. 이를 사용하려면 생성자에 간격을 전달하거나 setInterval()를 사용하여 생성 후 설정하여 QChronoTimer를 생성하고 timeout() 신호를 적절한 슬롯에 연결한 다음 start()를 호출합니다. 그 이후부터는 일정한 간격으로 timeout() 신호를 내보냅니다. 예를 들어

        QChronoTimer *timer = new QChronoTimer(1s, this);
        connect(timer, &QChronoTimer::timeout, this, &MyWidget::processOneThing);
        timer->start();
        QChronoTimer *timer = new QChronoTimer(this);
        connect(timer, &QChronoTimer::timeout, this, &MyWidget::processOneThing);
        timer->setInterval(1s);
        timer->start();

setSingleShot( true)를 호출하여 타이머가 한 번만 타임아웃되도록 설정할 수 있습니다.

참고: QTimer 의 정적 메서드는 이미 크로노 유형 및 나노초 해상도에서 작동하므로 QChronoTimer에는 단일 샷() 정적 메서드가 없습니다.

멀티스레드 애플리케이션에서는 이벤트 루프가 있는 모든 스레드에서 QChronoTimer를 사용할 수 있습니다. GUI가 아닌 스레드에서 이벤트 루프를 시작하려면 QThread::exec()를 사용합니다. Qt는 타이머의 thread affinity 를 사용하여 timeout() 신호를 방출할 스레드를 결정합니다. 따라서 해당 스레드에서 타이머를 시작하고 중지해야 하며, 다른 스레드에서 타이머를 시작할 수는 없습니다.

특별한 경우로, 타임아웃이 0ns 인 QChronoTimer는 가능한 한 빨리 타임아웃되지만 제로 타이머와 다른 이벤트 소스 간의 순서는 지정되지 않습니다. 제로 타이머는 반응형 사용자 인터페이스를 제공하면서 일부 작업을 수행하는 데 사용할 수 있습니다:

        // The default interval is 0ns
        QChronoTimer *timer = new QChronoTimer(this);
        connect(timer, &QChronoTimer::timeout, this, &MyWidget::processOneThing);
        timer->start();

그 이후부터는 processOneThing() 이 반복적으로 호출됩니다. Qt가 사용자 인터페이스에 이벤트를 전달하고 모든 작업을 완료하자마자 타이머를 중지할 수 있도록 항상 빠르게 반환되도록(예를 들어, 하나의 데이터 항목을 처리한 후) 작성해야 합니다. 이것은 GUI 애플리케이션에서 무거운 작업을 구현하는 전통적인 방법이지만, 더 많은 플랫폼에서 멀티스레딩을 사용할 수 있게 되면서 GUI(메인) 스레드가 아닌 다른 스레드에서 무거운 작업을 수행하는 것이 최신 대안으로 떠오르고 있습니다. Qt에는 이를 위해 사용할 수 있는 QThread 클래스가 있습니다.

정확도 및 타이머 해상도

타이머의 정확도는 기본 운영 체제 및 하드웨어에 따라 다릅니다. 대부분의 플랫폼은 타이머에 나노초 단위의 정밀도 요청을 지원하지만(예: libc의 nanosleep), 타이머의 정확도는 많은 실제 상황에서 이 해상도와 같지 않을 것입니다.

timer type 을 설정하여 QChronoTimer에 시스템에서 요청할 정밀도를 알려줄 수 있습니다.

Qt::PreciseTimer 의 경우 QChronoTimer는 1ns 에서 정밀도를 유지하려고 시도합니다. 정밀 타이머는 예상보다 일찍 시간 초과되지 않습니다.

Qt::CoarseTimerQt::VeryCoarseTimer 유형의 경우, QChronoTimer는 해당 유형의 마진 범위 내에서 예상보다 일찍 깨어날 수 있습니다:

시스템이 사용 중이거나 요청된 정확도를 제공할 수 없는 경우 모든 타이머 유형이 예상보다 늦게 시간 초과될 수 있습니다. 이러한 타임아웃 오버런의 경우, 여러 타임아웃이 만료된 경우에도 Qt는 timeout()를 한 번만 전송한 다음 원래 간격으로 재개합니다.

QChronoTimer의 대안

QChronoTimer는 나노초 분해능과 ±292년 범위를 제공합니다(간격이 std::numeric_limits<int>::max() 보다 길면 정수 오버플로우 가능성이 적습니다). 밀리초 해상도와 ±24일 범위만 필요한 경우 기존 QTimer 클래스를 계속 사용할 수 있습니다.

또 다른 대안은 클래스에서 QObject::timerEvent() 메서드를 다시 구현하고( QObject 의 하위 클래스여야 함) 다음 접근 방식 중 하나를 사용하는 것입니다:

  • 타이머 ID를 감싸는 경량 값 클래스인 QBasicTimer 를 사용합니다. QBasicTimer::start()로 타이머를 시작하고 QBasicTimer::stop()로 타이머를 중지할 수 있습니다. 다시 구현된 timerEvent()에서 이벤트를 처리할 수 있습니다.
  • 보다 낮은 수준의 방법은 타이머 ID를 직접 조작하는 것입니다. 타이머를 시작하려면 QObject::startTimer()를 호출하여 반환된 ID를 저장합니다. 타이머를 중지하려면 QObject::killTimer()를 호출합니다. 다시 구현한 timerEvent()에서 이벤트를 처리할 수 있습니다. 이 접근 방식은 일반적으로 QBasicTimer 을 사용하는 것보다 번거롭습니다.

timerEvent() 사용의 단점은 단일 샷 타이머 및 신호와 같은 일부 고급 기능이 지원되지 않는다는 것입니다.

일부 운영체제는 사용할 수 있는 타이머의 수를 제한하는데, Qt는 이러한 제한을 해결하기 위해 최선을 다하고 있습니다.

QBasicTimer, QTimerEvent, QObject::timerEvent(), 타이머아날로그 시계를참조하십시오 .

속성 문서

[bindable read-only] active : bool

참고: 이 속성은 QProperty 바인딩을 지원합니다.

이 부울 속성은 타이머가 실행 중이면 true, 그렇지 않으면 false 입니다.

[bindable] interval : std::chrono::nanoseconds

참고: 이 속성은 QProperty 바인딩을 지원합니다.

이 속성은 시간 초과 간격을 유지합니다.

이 속성의 기본값은 0ns 입니다.

시간 초과가 0nsQChronoTimer 은 창 시스템의 이벤트 큐에 있는 모든 이벤트가 처리되는 즉시 시간 초과됩니다.

실행 중인 타이머의 간격을 설정하면 타이머가 stop()로 변경된 다음 start()로 변경되고 새로운 id()가 획득됩니다. 타이머가 실행되고 있지 않으면 간격만 변경됩니다.

singleShot참조하세요 .

[read-only] remainingTime : const std::chrono::nanoseconds

이 속성은 남은 시간을 보유합니다.

타임아웃까지 남은 기간을 반환합니다.

타이머가 비활성 상태인 경우 반환되는 기간은 음수가 됩니다.

타이머가 기한이 지난 경우 반환되는 기간은 0ns 입니다.

함수에 액세스합니다:

std::chrono::nanoseconds remainingTime() const

interval참조하세요 .

[bindable] singleShot : bool

참고: 이 프로퍼티는 QProperty 바인딩을 지원합니다.

이 속성은 타이머가 싱글샷 타이머인지 여부를 보유합니다.

싱글샷 타이머는 한 번만 실행되고, 비싱글샷 타이머는 매 interval 마다 실행됩니다.

이 속성의 기본값은 false 입니다.

interval도 참조하세요 .

[bindable] timerType : Qt::TimerType

참고: 이 속성은 QProperty 바인딩을 지원합니다.

타이머의 정확도를 제어합니다.

이 속성의 기본값은 Qt::CoarseTimer 입니다.

Qt::TimerType참조하세요 .

멤버 함수 문서

[explicit] QChronoTimer::QChronoTimer(QObject *parent = nullptr)

기본 간격인 0ns 을 사용하여 주어진 parent 으로 타이머를 구성합니다.

[explicit] QChronoTimer::QChronoTimer(std::chrono::nanoseconds nsec, QObject *parent = nullptr)

nsec 의 간격을 사용하여 주어진 parent 으로 타이머를 구성합니다.

[override virtual noexcept] QChronoTimer::~QChronoTimer()

타이머를 파괴합니다.

template <typename Functor> QMetaObject::Connection QChronoTimer::callOnTimeout(const QObject *context, Functor &&slot, Qt::ConnectionType connectionType = Qt::AutoConnection)

이 함수는 callOnTimeout()을 오버로드합니다.

timeout() 신호에서 slot 로의 연결을 생성하여 context 의 특정 이벤트 루프에 연결 유형 connectionType 으로 배치하고 연결에 대한 핸들을 반환합니다.

이 메서드는 편의상 제공됩니다. 호출과 동일합니다:

QObject::connect(timer, &QChronoTimer::timeout, context, slot, connectionType);

QObject::connect() 및 timeout()도 참조하세요 .

Qt::TimerId QChronoTimer::id() const

타이머가 실행 중이면 타이머 ID를 나타내는 Qt::TimerId 를 반환하고, 그렇지 않으면 Qt::TimerId::Invalid 을 반환합니다.

Qt::TimerId참조하세요 .

bool QChronoTimer::isActive() const

타이머가 실행 중이면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

참고: active 속성에 대한 게터 함수.

[slot] void QChronoTimer::start()

이 함수는 start()를 오버로드합니다.

interval 에 지정된 시간 초과로 타이머를 시작하거나 다시 시작합니다.

타이머가 이미 실행 중이면 stopped 이 되어 다시 시작됩니다. 그러면 id()도 변경됩니다.

singleShot 이 참이면 타이머는 한 번만 활성화됩니다.

[slot] void QChronoTimer::stop()

타이머를 중지합니다.

start()도 참조하세요 .

[private signal] void QChronoTimer::timeout()

이 신호는 타이머가 시간 초과되면 발산됩니다.

참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수 있지만 사용자가 방출할 수는 없습니다.

interval, start() 및 stop()도 참조하세요 .

[override virtual protected] void QChronoTimer::timerEvent(QTimerEvent *e)

다시 구현합니다: QObject::timerEvent(Q타이머이벤트 *이벤트).

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