QFutureWatcher Class
template <typename T> class QFutureWatcherQFutureWatcher 클래스를 사용하면 신호와 슬롯을 통해 QFuture 를 모니터링할 수 있습니다. 더 보기...
| 헤더: | #include <QFutureWatcher> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 상속: | QObject |
- 상속된 멤버를 포함한 모든 멤버 목록
- 사용 중단된 멤버
- QFutureWatcher는 스레딩 클래스의 일부입니다.
참고: 이 클래스의 모든 함수는 재진입 가능합니다.
공개 함수
| QFutureWatcher(QObject *parent = nullptr) | |
| virtual | ~QFutureWatcher() |
| QFuture<T> | future() const |
| bool | isCanceled() const |
| bool | isFinished() const |
| bool | isRunning() const |
| bool | isStarted() const |
(since 6.0) bool | isSuspended() const |
(since 6.0) bool | isSuspending() const |
| int | progressMaximum() const |
| int | progressMinimum() const |
| QString | progressText() const |
| int | progressValue() const |
| T | result() const |
| T | resultAt(int index) const |
| void | setFuture(const QFuture<T> &future) |
| void | setPendingResultsLimit(int limit) |
| void | waitForFinished() |
공개 슬롯
| void | cancel() |
| void | resume() |
(since 6.0) void | setSuspended(bool suspend) |
(since 6.0) void | suspend() |
(since 6.0) void | toggleSuspended() |
신호
| void | canceled() |
| void | finished() |
| void | progressRangeChanged(int minimum, int maximum) |
| void | progressTextChanged(const QString &progressText) |
| void | progressValueChanged(int progressValue) |
| void | resultReadyAt(int index) |
| void | resultsReadyAt(int beginIndex, int endIndex) |
| void | resumed() |
| void | started() |
(since 6.0) void | suspended() |
(since 6.0) void | suspending() |
상세 설명
QFutureWatcher는 템플릿 매개변수 T 가 감시 대상인 QFuture 의 결과 유형을 지정하는 템플릿 클래스입니다. QFutureWatcher는 QFuture 에 대한 정보와 알림을 제공합니다. setFuture() 함수를 사용하여 특정 QFuture 에 대한 감시를 시작하십시오. future() 함수는 setFuture()로 설정된 퓨처를 반환합니다.
편의를 위해 QFuture 의 여러 함수들도 QFutureWatcher에서 사용할 수 있습니다: progressValue(), progressMinimum(), progressMaximum(), progressText(), isStarted(), isFinished(), isRunning(), isCanceled(), isSuspending(), isSuspended(), waitForFinished(), result(), resultAt(). cancel(), setSuspended(), suspend(), resume() 및 toggleSuspended() 함수는 QFutureWatcher의 슬롯입니다.
상태 변경은 started(), finished(), canceled(), suspending(), suspended(), resumed(), resultReadyAt() 및 resultsReadyAt() 시그널을 통해 보고됩니다. 진행 상황 정보는 progressRangeChanged(), void progressValueChanged() 및 progressTextChanged() 시그널을 통해 제공됩니다.
스로틀링 제어는 setPendingResultsLimit() 함수를 통해 제공됩니다. 보류 중인 resultReadyAt() 또는 resultsReadyAt() 신호의 수가 제한을 초과하면, 퓨처가 나타내는 계산이 자동으로 스로틀링됩니다. 보류 중인 신호의 수가 제한 이하로 떨어지면 계산이 재개됩니다.
예제: 계산을 시작하고 완료 시 슬롯 콜백을 수신하는 방법:
// Instantiate the objects and connect to the finished signal.
MyClass myObject;
QFutureWatcher<int> watcher;
QObject::connect(&watcher, &QFutureWatcher<int>::finished, &myObject, &MyClass::handleFinished);
// Start the computation.
QFuture<int> future = QtConcurrent::run([result](){ /*...*/ return result;});
watcher.setFuture(future);실행 중인 모든 비동기 계산이 취소되거나 일시 중지될 수 있는 것은 아니라는 점에 유의하십시오. 예를 들어, QtConcurrent::run()이 반환하는 퓨처는 취소할 수 없지만, QtConcurrent::mappedReduced()가 반환하는 퓨처는 취소할 수 있습니다.
QFutureWatcher<void>는 결과 가져오기 함수를 전혀 포함하지 않도록 특화되어 있습니다. 또한, 어떤 QFuture<T>도 QFutureWatcher<void>를 통해 감시할 수 있습니다. 이는 실제 결과 데이터가 아닌 상태나 진행 상황 정보만 필요한 경우에 유용합니다.
멤버 함수 문서
[explicit] QFutureWatcher::QFutureWatcher(QObject *parent = nullptr)
주어진 ` parent`를 사용하여 새로운 `QFutureWatcher`를 생성합니다. ` setFuture()`를 통해 퓨처가 설정될 때까지, ` isStarted()`, ` isCanceled()` 및 ` isFinished()` 함수는 ` true`를 반환합니다.
[virtual] QFutureWatcher::~QFutureWatcher()
QFutureWatcher 를 파괴합니다.
[slot] void QFutureWatcher::cancel()
future()로 표현된 비동기 계산을 취소합니다. 취소 작업은 비동기적으로 수행된다는 점에 유의하십시오. 동기적인 취소가 필요한 경우, cancel()을 호출한 후 waitForFinished()를 사용하십시오.
취소된 QFuture 에서도 현재 사용 가능한 결과에는 여전히 접근할 수 있지만, 이 함수를 호출한 후에는 새로운 결과가 생성되지 않습니다. 또한, 이 QFutureWatcher 은 취소된 후에는 진행 상황 및 결과 준비 신호를 더 이상 전달하지 않습니다. 여기에는 progressValueChanged(), progressRangeChanged(), progressTextChanged(), resultReadyAt(), resultsReadyAt() 신호가 포함됩니다.
실행 중인 모든 비동기 계산이 취소될 수 있는 것은 아니라는 점에 유의하십시오. 예를 들어, QtConcurrent::run()이 반환하는 QFuture 는 취소할 수 없지만, QtConcurrent::mappedReduced()가 반환하는 QFuture 는 취소할 수 있습니다.
[signal] void QFutureWatcher::canceled()
감시 중인 퓨처가 취소되면 이 신호가 발생합니다.
[signal] void QFutureWatcher::finished()
이 신호는 모니터링 중인 선물 계약이 만기될 때 발생합니다.
QFuture<T> QFutureWatcher::future() const
감시 중인 퓨처를 반환합니다.
setFuture()도 참조하십시오 .
bool QFutureWatcher::isCanceled() const
cancel() 함수를 통해 비동기 계산이 취소되었거나, future가 설정되지 않은 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
이 함수가 true 를 반환하더라도 계산이 여전히 실행 중일 수 있다는 점에 유의하십시오. 자세한 내용은 cancel()을 참조하십시오.
bool QFutureWatcher::isFinished() const
future()가 나타내는 비동기 계산이 완료되었거나, future가 설정되지 않은 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
bool QFutureWatcher::isRunning() const
future()가 나타내는 비동기 계산이 현재 실행 중이면 ` true `를 반환하고, 그렇지 않으면 ` false`를 반환합니다.
bool QFutureWatcher::isStarted() const
future()가 나타내는 비동기 계산이 시작된 경우, 또는 future가 설정되지 않은 경우 true 를 반환하고, 그렇지 않은 경우 false 를 반환합니다.
[since 6.0] bool QFutureWatcher::isSuspended() const
비동기 계산의 일시 중지가 요청되었고, 해당 일시 중지가 유효한 경우(즉, 더 이상 결과나 진행 상황의 변화가 예상되지 않는 경우) true 를 반환합니다.
이 함수는 Qt 6.0에서 도입되었습니다.
suspended(), setSuspended(), isSuspending()도 참조하십시오 .
[since 6.0] bool QFutureWatcher::isSuspending() const
suspend() 함수를 통해 비동기 계산이 일시 중지되었으나, 작업은 아직 일시 중지되지 않았고 계산이 여전히 진행 중인 경우 true 를 반환합니다. 그 외의 경우에는 false 를 반환합니다.
일시 중지가 실제로 적용되었는지 확인하려면 대신 ` isSuspended()`를 사용하십시오.
이 함수는 Qt 6.0에서 도입되었습니다.
setSuspended(), toggleSuspended() 및 isSuspended()도 참조하십시오 .
int QFutureWatcher::progressMaximum() const
progressValue()의 최대값을 반환합니다.
progressValue() 및 progressMinimum()도 참조하십시오 .
int QFutureWatcher::progressMinimum() const
progressValue()의 최소값을 반환합니다.
progressValue() 및 progressMaximum()도 참조하십시오 .
[signal] void QFutureWatcher::progressRangeChanged(int minimum, int maximum)
관찰 대상인 퓨처의 진행 범위(progress range)가 minimum 및 maximum 로 변경되었습니다.
QString QFutureWatcher::progressText() const
비동기 계산에서 보고된 진행 상황의 (선택적) 텍스트 표현을 반환합니다.
모든 계산이 진행 상황을 텍스트로 표현하는 것은 아니므로, 이 함수는 빈 문자열을 반환할 수도 있습니다.
[signal] void QFutureWatcher::progressTextChanged(const QString &progressText)
이 신호는 모니터링 대상인 퓨처가 텍스트 형식의 진행 상황 정보를 보고할 때 발생합니다. progressText.
int QFutureWatcher::progressValue() const
progressMinimum()과 progressMaximum() 사이의 현재 진행률 값을 반환합니다.
progressMinimum() 및 progressMaximum()도 참조하십시오 .
[signal] void QFutureWatcher::progressValueChanged(int progressValue)
이 신호는 감시 중인 퓨처가 진행 상황을 보고할 때 발송되며, ` progressValue `는 현재 진행 상황을 반환합니다. GUI 이벤트 루프에 과부하가 걸리는 것을 방지하기 위해, ` QFutureWatcher `는 진행 상황 신호의 발송 빈도를 제한합니다. 즉, 이 슬롯에 연결된 리스너가 퓨처가 생성하는 모든 진행 상황 보고를 수신하지 못할 수도 있습니다. 마지막 진행 상황 업데이트(` progressValue `가 최대값과 일치하는 경우)는 항상 전달됩니다.
template <typename U = T, typename = QtPrivate::EnableForNonVoid<U>> T QFutureWatcher::result() const
future()의 첫 번째 결과를 반환합니다. 결과가 즉시 사용 가능하지 않은 경우, 이 함수는 차단되어 결과가 사용 가능해질 때까지 대기합니다. 이는 resultAt(0)을 호출하기 위한 편의 메서드입니다.
resultAt()도 참조하십시오 .
template <typename U = T, typename = QtPrivate::EnableForNonVoid<U>> T QFutureWatcher::resultAt(int index) const
future()의 index 에 있는 결과를 반환합니다. 결과가 즉시 사용 가능하지 않은 경우, 이 함수는 블록 상태가 되어 결과가 사용 가능해질 때까지 대기합니다.
result()도 참조하십시오 .
[signal] void QFutureWatcher::resultReadyAt(int index)
이 신호는 감시 중인 퓨처가 index 에서 준비 완료 결과를 보고할 때 발생합니다. 퓨처가 여러 결과를 보고하는 경우, 인덱스는 해당 결과가 어느 것인지를 나타냅니다. 결과는 순서와 상관없이 보고될 수 있습니다. 결과를 가져오려면 resultAt(index)를 호출하십시오;
[signal] void QFutureWatcher::resultsReadyAt(int beginIndex, int endIndex)
이 신호는 모니터링 중인 퓨처가 결과를 준비 완료했다고 보고할 때 발생합니다. 결과의 인덱스는 beginIndex 부터 endIndex 까지입니다.
[slot] void QFutureWatcher::resume()
future()로 표현된 비동기 계산을 재개합니다. 이 메서드는 단순히 setSuspended(false)를 호출하는 편의 메서드입니다.
suspend()도 참조하십시오 .
[signal] void QFutureWatcher::resumed()
이 신호는 감시 중인 퓨처가 재개될 때 발생합니다.
void QFutureWatcher::setFuture(const QFuture<T> &future)
지정된 ` future`을 감시하기 시작합니다.
future 가 이미 실행 중이라면, 감시자는 처음에 리스너들에게 미래 객체의 최신 상태를 알려주는 신호를 발산합니다. 해당되는 경우, 다음 신호들이 지정된 순서대로 발산됩니다: started(), progressRangeChanged(), progressValueChanged(), progressTextChanged(), resultsReadyAt(), resultReadyAt(), suspending(), suspended(), canceled(), 및 finished(). 이 중 resultsReadyAt()과 resultReadyAt()은 사용 가능한 모든 결과를 포함하기 위해 여러 번 출력될 수 있습니다. progressValueChanged()과 progressTextChanged()은 사용 가능한 최신 진행 상황 값과 텍스트에 대해서만 한 번씩 출력됩니다.
경합 상태를 방지하려면 연결을 완료한 후에 이 함수를 호출하는 것이 중요합니다.
future()도 참조하십시오 .
void QFutureWatcher::setPendingResultsLimit(int limit)
setPendingResultsLimit()은 스로틀링 제어 기능을 제공합니다. 대기 중인 resultReadyAt() 또는 resultsReadyAt() 신호의 수가 limit 을 초과하면, 해당 퓨처가 나타내는 계산이 자동으로 제한됩니다. 대기 중인 신호의 수가 limit 아래로 떨어지면 계산이 재개됩니다.
[slot, since 6.0] void QFutureWatcher::setSuspended(bool suspend)
suspend 가 true인 경우, 이 함수는 future()로 표현된 비동기 계산을 일시 중지합니다. 계산이 이미 일시 중지된 상태라면, 이 함수는 아무 작업도 수행하지 않습니다. QFutureWatcher 는 future가 일시 중지되었을 때 진행 상황 및 결과 준비 신호의 전달을 즉시 중단하지 않습니다. 일시 중지 시점에도 여전히 진행 중이며 중지할 수 없는 계산이 남아 있을 수 있습니다. 이러한 계산에 대한 신호는 계속해서 전달됩니다.
suspend 가 false인 경우, 이 함수는 비동기 계산을 재개합니다. 계산이 이전에 일시 중지된 적이 없다면, 이 함수는 아무 작업도 수행하지 않습니다.
모든 계산이 일시 중지될 수 있는 것은 아니라는 점에 유의하십시오. 예를 들어, QtConcurrent::run()이 반환하는 QFuture 는 일시 중지할 수 없지만, QtConcurrent::mappedReduced()가 반환하는 QFuture 는 일시 중지할 수 있습니다.
이 함수는 Qt 6.0에서 도입되었습니다.
suspended(), suspend(), resume(), toggleSuspended()도 참조하십시오 .
[signal] void QFutureWatcher::started()
이 신호는 이 QFutureWatcher 가 setFuture()를 사용하여 미래 집합을 관찰하기 시작할 때 발생합니다.
[slot, since 6.0] void QFutureWatcher::suspend()
이 퓨처가 나타내는 비동기 계산을 일시 중지합니다. 이는 단순히 ` setSuspended(true)`를 호출하는 편의 메서드입니다.
이 함수는 Qt 6.0에서 도입되었습니다.
resume()도 참조하십시오 .
[signal, since 6.0] void QFutureWatcher::suspended()
이 신호는 ` suspend()`가 적용되었을 때 발생하며, 이는 더 이상 실행 중인 계산이 없음을 의미합니다. 이 신호를 수신한 후에는 더 이상 결과 준비 완료 또는 진행 상황 보고 신호가 발생하지 않습니다.
이 함수는 Qt 6.0에서 도입되었습니다.
setSuspended() 및 suspend()도 참조하십시오 .
[signal, since 6.0] void QFutureWatcher::suspending()
이 신호는 감시 중인 퓨처의 상태가 '일시 중지됨'으로 설정될 때 발생합니다.
참고: 이 신호는 일시 중지가 요청되었음을 알릴 뿐입니다. 모든 백그라운드 작업이 중지되었음을 나타내는 것은 아닙니다. 일시 중지 시점에 진행 중이던 계산에 대한 신호는 여전히 전달됩니다. 일시 중지가 실제로 적용되었을 때 알림을 받으려면 ` suspended()` 신호를 사용하십시오.
이 함수는 Qt 6.0에서 도입되었습니다.
setSuspended(), suspend(), suspended()도 참조하십시오 .
[slot, since 6.0] void QFutureWatcher::toggleSuspended()
비동기 계산의 일시 중지 상태를 전환합니다. 즉, 계산이 현재 일시 중지 중이거나 일시 중지 상태인 경우 이 함수를 호출하면 계산이 재개되고, 계산이 실행 중인 경우 일시 중지됩니다. 이 함수는 ` setSuspended(!(isSuspending() || isSuspended()))`를 호출하기 위한 편의 메서드입니다.
이 함수는 Qt 6.0에서 도입되었습니다.
setSuspended(), suspend() 및 resume()도 참조하십시오 .
void QFutureWatcher::waitForFinished()
비동기 연산이 완료될 때까지( cancel()로 호출된 연산 포함) 대기하며, 즉 isFinished()가 true 을 반환할 때까지 대기합니다.
© 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.