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는 이벤트 클래스의 일부입니다.
속성
|
|
공용 기능
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 | 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::CoarseTimer 및 Qt::VeryCoarseTimer 유형의 경우, QChronoTimer는 해당 유형의 마진 범위 내에서 예상보다 일찍 깨어날 수 있습니다:
- 의 경우 간격의 5% Qt::CoarseTimer
500ms
의 경우 Qt::VeryCoarseTimer
시스템이 사용 중이거나 요청된 정확도를 제공할 수 없는 경우 모든 타이머 유형이 예상보다 늦게 시간 초과될 수 있습니다. 이러한 타임아웃 오버런의 경우, 여러 타임아웃이 만료된 경우에도 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
입니다.
시간 초과가 0ns
인 QChronoTimer 은 창 시스템의 이벤트 큐에 있는 모든 이벤트가 처리되는 즉시 시간 초과됩니다.
실행 중인 타이머의 간격을 설정하면 타이머가 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.