QtTaskTree::QThreadFunction Class
template <typename ResultType> class QtTaskTree::QThreadFunctionQtConcurrent::run()을 통해 별도의 스레드에서 함수의 실행을 제어하는 클래스 템플릿입니다. 더 보기...
| 헤더: | #include <qthreadfunctiontask.h> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS TaskTree) target_link_libraries(mytarget PRIVATE Qt6::TaskTree) |
| qmake: | QT += tasktree |
| 다음부터: | Qt 6.11 |
| 상속: | QtTaskTree::QThreadFunctionBase |
| 상태: | 기술 미리보기 |
이 클래스는 기술 미리보기 단계에 있으며 변경될 수 있습니다.
참고: 이 클래스의 모든 함수는 재진입 가능합니다.
공개 함수
| QThreadFunction(QObject *parent = nullptr) | |
| virtual | ~QThreadFunction() override |
| QFuture<ResultType> | future() const |
| QFutureWatcher<ResultType> * | futureWatcher() |
| const QFutureWatcher<ResultType> * | futureWatcher() const |
| bool | isAutoDelayedSync() const |
| bool | isDone() const |
| bool | isResultAvailable() const |
| ResultType | result() const |
| ResultType | resultAt(int index) const |
| QList<ResultType> | results() const |
| void | setAutoDelayedSync(bool on) |
| void | setThreadFunctionData(Function &&function, Args &&... args) |
| void | setThreadPool(QThreadPool *pool) |
| ResultType | takeResult() const |
| QThreadPool * | threadPool() const |
상세 설명
QThreadFunction은 편리한 클래스 템플릿으로, ` ResultType `은 저장된 함수의 반환 유형을 지정하며, QtConcurrent::run()을 통해 나중에 호출될 저장된 함수와 함수 실행을 모니터링하는 내부 ` QFutureWatcher `을 결합합니다. ` QThreadFunctionTask `을 사용하여 ` QTaskTree ` 레시피 내에서 QThreadFunction을 실행하십시오.
setThreadFunctionData() 메서드를 사용하여 별도의 스레드에서 실행될 함수와 해당 인수를 설정하십시오.
별도의 스레드에서 실행 중인 함수 내부에서 오류를 보고하려면, 해당 함수에서 QPromise<ResultType> &promise 인수를 첫 번째 인수로 지정하고, 프롬이스의 퓨처를 취소하십시오. 예:
static void copyFile(QPromise<void> &promise, const QString &source,
const QString &destination)
{
const QFileInfo fi(source);
if (!fi.exists()) {
promise.future().cancel(); // The QThreadFunction finishes with DoneResult::Error
return;
}
// Copy file...
}
QThreadFunction<void> task;
task.setThreadFunctionData(copyFile, "source.txt", "dest.txt");
task.start();setThreadPool()을 사용하여 함수를 원하는 스레드( QThreadPool)에서 실행하면 되며, 그렇지 않으면 함수는 기본 스레드( global thread pool)를 사용합니다.
setAutoDelayedSync()을 사용하여 자동 지연 동기화를 전환하십시오.
함수 실행을 제어하려면 관련 futureWatcher()의 신호에 연결하십시오. 출력 데이터를 수집하려면 result(), resultAt() 또는 results() 게터를 사용하십시오.
멤버 함수 문서
[implicit] QThreadFunction::QThreadFunction(QObject *parent = nullptr)
주어진 ` parent`를 사용하여 `QThreadFunction`을 생성합니다.
[override virtual] QThreadFunction::~QThreadFunction()
QThreadFunction 를 삭제합니다. QThreadFunction 가 실행 중이 아닌 경우 다른 작업은 수행되지 않으며, 실행 중인 경우 관련 퓨처가 취소되고, 자동 지연 동기화 설정에 따라 다음과 같은 작업이 수행됩니다:
| 자동 지연 동기화 | 작업 |
|---|---|
| 활성화 시 | 연관된 ` QFuture `가 전역 레지스트리에 저장됩니다. 애플리케이션 종료 시 ` QThreadFunctionBase::syncAll()`를 사용하여 이전에 전역 레지스트리에 저장된 모든 퓨처를 동기화하십시오. |
| 끄기 | QFuture::waitForFinished()에 대한 차단 호출이 직접 실행됩니다. |
자동 지연 동기화가 켜져 있을 때, 별도의 스레드에서 여전히 실행 중인 함수 내부에서 퓨처의 취소 요청이 가로채어질 수 있으므로, 해당 함수는 작업을 완료하지 않은 채 가능한 한 빨리 종료될 수 있습니다.
마지막으로, 애플리케이션 종료 시 별도의 스레드에서 여전히 실행 중일 가능성이 있는 모든 함수를 동기화하기 위해 QThreadFunctionBase::syncAll()을 호출해야 합니다. 일부 함수가 아직 종료 중일 경우, QThreadFunctionBase::syncAll() 호출은 차단됩니다.
참고: 자동 지연 동기화가 활성화된경우 , QThreadFunction 의 소멸자가 완료된 후에도 함수는 잠시 동안 계속 실행되므로, 함수가 처리할 수 있는 모든 데이터가 여전히 사용 가능한지 확인하는 것은 사용자의 책임입니다. 이를 보장할 수 없는 경우, QThreadFunction::setAutoDelayedSync(false)를 통해 자동 지연 동기화를 비활성화하십시오. 이 경우 QThreadFunction 의 소멸자는 QThreadFunction 를 삭제하기 전에 함수가 완료될 때까지 차단 대기합니다. Deleter 템플릿 매개변수에 대한 자세한 내용은 QCustomTask 문서를 참조하십시오.
setAutoDelayedSync() 및 syncAll()도 참조하십시오 .
QFuture<ResultType> QThreadFunction::future() const
별도의 스레드에서 실행된 함수와 관련된 <ResultType> 형식의 QFuture 을 반환합니다.
QFutureWatcher<ResultType> *QThreadFunction::futureWatcher()
별도의 스레드에서 실행된 함수와 연관된 ` QFutureWatcher<ResultType> `에 대한 포인터를 반환합니다. 반환된 워처의 수명은 ` QThreadFunction ` 인스턴스에 연동되어 있습니다.
예를 들어, 반환된 워처의 진행 신호에 연결하는 등 향후 실행을 더 세밀하게 제어해야 할 경우 이 함수를 사용하십시오.
const QFutureWatcher<ResultType> *QThreadFunction::futureWatcher() const
별도의 스레드에서 실행된 함수와 연관된 QFutureWatcher<ResultType> 에 대한 const 포인터를 반환합니다.
이 함수는 오버로드된 함수입니다.
bool QThreadFunction::isAutoDelayedSync() const
자동 지연 동기화가 활성화되어 있는지 여부를 반환합니다.
syncAll() 및 setAutoDelayedSync()도 참조하십시오 .
bool QThreadFunction::isDone() const
함수 실행이 완료되었는지 여부를 반환합니다.
bool QThreadFunction::isResultAvailable() const
결과가 준비되었는지 여부를 반환합니다.
result()도 참조하십시오 .
ResultType QThreadFunction::result() const
별도의 스레드에서 실행된 함수가 보고한 ResultType을 반환합니다.
참고: isResultAvailable()를 호출하여 결과가 준비되었는지확인하십시오 . 그렇지 않으면 결과가 아직 보고되지 않은 경우 result() 호출이 차단될 수 있으며, 결과를 보고하지 않고 함수 실행이 완료된 경우에는 프로그램이 중단될 수도 있습니다.
QFutureWatcher::result()도 참조하십시오 .
ResultType QThreadFunction::resultAt(int index) const
index 에서 별도의 스레드에서 실행된 함수가 반환한 ResultType을 반환합니다.
result() 및 QFutureWatcher::resultAt()도 참조하십시오 .
QList<ResultType> QThreadFunction::results() const
별도의 스레드에서 실행된 함수가 보고한 ResultType 목록을 반환합니다.
result(), resultAt(), QFuture::results()도 참조하십시오 .
void QThreadFunction::setAutoDelayedSync(bool on)
자동 지연 동기화를 ` on`로 설정합니다.
기본적으로 자동 지연 동기화가 활성화되어 있으므로, 실행 중인 QThreadFunction 객체의 소멸은 별도의 스레드에서 실행 중인 함수가 완료될 때까지 차단 대기하지 않습니다. 대신, 연관된 QFuture 가 취소되고, 해당 함수는 완료될 때까지 계속 실행됩니다. 별도의 스레드에서 실행 중인 함수는 ` QPromise ` 인수를 통해 이 중지를 가로챌 수 있으므로, 작업을 완료하지 않은 채 조기에 종료될 수 있습니다. 자동 지연 동기화가 활성화된 경우, 별도의 스레드에서 실행 중일 수 있는 모든 함수를 동기화하기 위해 애플리케이션 종료 시 ` QThreadFunctionBase::syncAll()`를 호출해야 합니다.
자동 지연 동기화가 꺼져 있는 경우, 동기화는 QThreadFunction 가 소멸될 때 발생하며, 이로 인해 호출자 스레드가 상당한 시간 동안 차단될 수 있습니다.
자동 동기화는 QThreadFunction 가 메인 스레드에서 실행된 경우에만 사용됩니다.
syncAll() 및 isAutoDelayedSync()도 참조하십시오 .
template <typename Function, typename... Args> void QThreadFunction::setThreadFunctionData(Function &&function, Args &&... args)
start()가 호출될 때, 전달된 ` args `를 사용하여 ` function `를 별도의 스레드에서 실행하도록 설정합니다.
QtConcurrent::run()도 참조하십시오 .
void QThreadFunction::setThreadPool(QThreadPool *pool)
호출을 실행할 때 사용할 ` QThreadPool ` pool 을 설정합니다. 전달된 ` pool `이 ` nullptr`인 경우, ` QThreadPool::globalInstance()`이 사용됩니다.
threadPool()도 참조하십시오 .
ResultType QThreadFunction::takeResult() const
별도의 스레드에서 실행된 함수가 반환한 ResultType을 가져옵니다.
참고: isResultAvailable()를 호출하여 결과가 준비되었는지확인하십시오 . 그렇지 않으면 결과가 아직 보고되지 않은 경우 takeResult() 호출이 차단될 수 있으며, 결과를 보고하지 않은 채 함수 실행이 완료된 경우에는 프로그램이 중단될 수도 있습니다.
QFuture::takeResult()도 참조하십시오 .
QThreadPool *QThreadFunction::threadPool() const
호출을 실행할 때 사용되는 스레드 풀을 반환합니다. nullptr 가 반환되면 QThreadPool::globalInstance()이 사용됩니다.
setThreadPool()도 참조하십시오 .
© 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.