이 페이지에서

QtTaskTree::QThreadFunction Class

template <typename ResultType> class QtTaskTree::QThreadFunction

QtConcurrent::run()을 통해 별도의 스레드에서 함수의 실행을 제어하는 클래스 템플릿입니다. 더 보기...

Header: #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은 나중에 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();

원하는 QThreadPool 에서 함수를 실행하려면 setThreadPool()를 사용하고, 그렇지 않으면 global thread pool 을 사용합니다.

setAutoDelayedSync()를 사용하여 자동 지연 동기화를 전환합니다.

함수 실행을 제어하려면 연결된 futureWatcher()의 신호에 연결합니다. 출력 데이터를 수집하려면 result(), resultAt() 또는 results() 게터를 사용합니다.

멤버 함수 문서

[default] QThreadFunction::QThreadFunction(QObject *parent = nullptr)

주어진 parent 로 QThreadFunction을 구축합니다.

[override virtual] QThreadFunction::~QThreadFunction()

QThreadFunction 을 삭제합니다. QThreadFunction 이 실행되고 있지 않으면 다른 작업이 수행되지 않고, 그렇지 않으면 연결된 미래가 취소되며 자동 지연 동기화에 따라 다음 작업이 수행됩니다:

자동 지연 동기화동작
On연결된 QFuture 이 글로벌 레지스트리에 저장됩니다. 애플리케이션 종료 시 QThreadFunctionBase::syncAll()를 사용하여 글로벌 레지스트리에 이전에 저장된 모든 선물을 동기화합니다.
OffQFuture::waitForFinished()에 대한 차단 호출이 직접 실행됩니다.

자동 지연 동기화가 켜져 있으면 아직 실행 중인 함수 내부에서 별도의 스레드에서 선물 취소를 가로채서 작업을 완료하지 않고 가능한 한 빨리 완료할 수 있습니다.

마지막으로 애플리케이션 종료 시 별도의 스레드에서 실행 중인 모든 함수를 동기화하기 위해 QThreadFunctionBase::syncAll()를 호출해야 합니다. 일부 함수가 아직 마무리 중일 경우 QThreadFunctionBase::syncAll() 호출이 차단됩니다.

참고: 자동 지연 동기화가 켜져 있으면 QThreadFunction 의 소멸자가 완료된 후에도 함수가 잠시 동안 계속 실행되므로 함수가 작동할 수 있는 모든 데이터를 계속 사용할 수 있는지 확인하는 것은 사용자의 책임입니다. 이를 보장할 수 없는 경우 QThreadFunction::setAutoDelayedSync(false)를 통해 자동 지연 동기화를 꺼짐으로 설정하세요. 이 경우 QThreadFunction 소멸자는 QThreadFunction 을 삭제하기 전에 함수가 완료될 때까지 대기합니다. Deleter 템플릿 매개변수에 대한 자세한 내용은 QCustomTask 문서를 참조하세요.

setAutoDelayedSync() 및 syncAll()도 참조하세요 .

QFuture<ResultType> QThreadFunction::future() const

별도의 스레드에서 실행된 함수와 연관된 QFuture<ResultType>을 반환합니다.

QFutureWatcher<ResultType> *QThreadFunction::futureWatcher()

별도의 스레드에서 실행된 함수와 연결된 QFutureWatcher<ResultType> 에 대한 포인터를 반환합니다. 반환된 감시자의 수명은 QThreadFunction 인스턴스에 바인딩됩니다.

반환된 감시자의 진행률 신호에 연결하는 등 향후 실행을 보다 세밀하게 제어해야 하는 경우 이 함수를 사용하세요.

const QFutureWatcher<ResultType> *QThreadFunction::futureWatcher() const

const 별도의 스레드에서 실행된 함수와 연결된 QFutureWatcher<ResultType> 포인터를 반환합니다.

이 함수는 오버로드된 함수입니다.

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)

function start()가 호출될 때 전달된 args 을 별도의 스레드에서 실행하도록 설정합니다.

QtConcurrent::run()도 참조하십시오 .

void QThreadFunction::setThreadPool(QThreadPool *pool)

호출을 실행할 때 사용할 QThreadPool pool 을 설정합니다. 전달된 poolnullptr 인 경우 QThreadPool::globalInstance()가 사용됩니다.

threadPool()도 참조하세요 .

ResultType QThreadFunction::takeResult() const

별도의 스레드에서 실행된 함수가 보고한 결과 타입을 가져옵니다(이동).

참고: 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.