이 페이지에서

QtTaskTree::QTaskTree Class

class QtTaskTree::QTaskTree

QTaskTree 클래스는 선언적 방식으로 정의된 비동기 작업의 트리를 실행합니다. 더 보기...

헤더: #include <qtasktree.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS TaskTree)
target_link_libraries(mytarget PRIVATE Qt6::TaskTree)
qmake: QT += tasktree
이후: Qt 6.11
상속합니다: QObject

참고: 이 클래스의 모든 함수는 재인용됩니다.

공용 함수

QTaskTree(QObject *parent)
QTaskTree(const QtTaskTree::Group &recipe, QObject *parent = nullptr)
virtual ~QTaskTree() override
qsizetype asyncCount() const
void cancel()
bool isRunning() const
void onStorageDone(const QtTaskTree::Storage<StorageStruct> &storage, Handler &&handler)
void onStorageSetup(const QtTaskTree::Storage<StorageStruct> &storage, Handler &&handler)
qsizetype progressMaximum() const
qsizetype progressValue() const
QtTaskTree::DoneWith runBlocking()
QtTaskTree::DoneWith runBlocking(const QFuture<void> &future)
void setRecipe(const QtTaskTree::Group &recipe)
void start()
qsizetype taskCount() const

Signals

void asyncCountChanged(qsizetype count)
void done(QtTaskTree::DoneWith result)
void progressValueChanged(qsizetype value)
void started()

정적 공용 멤버

QtTaskTree::DoneWith runBlocking(const QtTaskTree::Group &recipe)
QtTaskTree::DoneWith runBlocking(const QtTaskTree::Group &recipe, const QFuture<void> &future)

재구현된 보호 함수

virtual bool event(QEvent *event) override

상세 설명

태스크 트리가 수행해야 하는 작업에 대한 설명은 레시피를 통해 전달됩니다.

멤버 함수 문서

[explicit] QTaskTree::QTaskTree(QObject *parent)

주어진 parent 으로 빈 작업 트리를 만듭니다. setRecipe ()를 사용하여 작업 트리가 작업을 실행하는 방법과 완료된 작업을 처리하는 방법에 대한 선언적 설명을 전달합니다.

빈 작업 트리를 시작하면 작동하지 않으며 관련 경고 메시지가 표시됩니다.

setRecipe() 및 start()도 참조하세요 .

[explicit] QTaskTree::QTaskTree(const QtTaskTree::Group &recipe, QObject *parent = nullptr)

주어진 recipeparent 로 작업 트리를 구성합니다. 작업 트리가 시작되면 recipe 안에 포함된 작업을 실행하고 전달된 설명에 따라 완료된 작업을 처리합니다.

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

setRecipe() 및 start()도 참조하세요 .

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

작업 트리를 파괴합니다.

작업 트리가 소멸되는 동안 실행 중인 경우 실행 중인 모든 작업을 즉시 취소합니다. 이 경우 그룹 및 작업의 완료 핸들러나 onStorageDone() 핸들러를 포함한 어떤 핸들러도 호출되지 않습니다. 작업 트리는 또한 소멸자로부터 done() 또는 progressValueChanged() 신호를 비롯한 어떤 신호도 방출하지 않습니다. 이 동작은 항상 신뢰할 수 있습니다. 실행 중인 작업 트리를 소멸하는 것은 완전히 안전합니다.

실행 중인 작업 트리를 소멸하는 것은 일반적인 패턴입니다. 사용된 작업이 소멸자를 비차단 방식으로 구현한다면 현재 실행 중인 작업이 완료될 때까지 기다릴 필요 없이 소멸이 빠르게 실행될 수 있습니다.

참고: 실행 중인 작업의 핸들러나 작업 트리의 시그널에서 직접 소멸자를 호출하지 마세요. 이러한 경우에는 deleteLater()를 대신 사용하세요.

cancel()도 참조하세요 .

qsizetype QTaskTree::asyncCount() const

비동기 호출 체인의 현재 실제 개수를 반환합니다.

반환된 값은 태스크 트리가 실행되는 동안 컨트롤이 호출자의 이벤트 루프로 돌아간 횟수를 나타냅니다. 처음에 이 값은 0 입니다. 작업 트리의 실행이 완전히 동기식으로 완료되면 이 값은 0 입니다. 작업 트리에 start() 호출 중에 성공적으로 시작된 비동기 작업이 포함된 경우 이 값은 start() 호출이 완료되기 직전에 1 으로 변경됩니다. 나중에 비동기 작업이 완료되고 가능한 연속 작업이 시작되면 이 값은 다시 범핑됩니다. 범핑은 작업 트리가 완료될 때까지 계속됩니다. 작업 트리가 done() 신호를 보내면 범핑이 중지됩니다. asyncCountChanged () 신호는 이 값의 범프가 발생할 때마다 전송됩니다.

asyncCountChanged()도 참조하세요 .

[signal] void QTaskTree::asyncCountChanged(qsizetype count)

이 신호는 실행 중인 태스크 트리가 호출자의 이벤트 루프에 제어권을 반환하려고 할 때 발생합니다. 태스크 트리가 시작되면 이 신호는 count0 으로 전송되며, 이후 매 asyncCount() 값 범프마다 업데이트된 count 값으로 전송됩니다. 전송된 모든 신호( 0 값이 초기인 신호 제외)는 신호가 전송된 후에도 작업 트리가 여전히 비동기적으로 실행되고 있음을 보장합니다.

asyncCount()도 참조하세요 .

void QTaskTree::cancel()

실행 중인 작업 트리의 실행을 취소합니다.

실행 중인 모든 작업을 즉시 취소합니다. 실행 중인 모든 작업과 그룹은 오류와 함께 완료된 처리기를 DoneWith::Cancel 으로 호출하여 완료됩니다. 스토리지의 onStorageDone() 핸들러도 호출됩니다. progressValueChanged () 신호도 전송됩니다. 이 동작은 항상 신뢰할 수 있습니다.

취소() 함수는 동기적으로 실행되므로 취소() 호출 후 실행 중인 모든 작업이 완료되고 트리가 이미 취소됩니다. 사용된 작업이 소멸자를 비블록킹 방식으로 구현하는 경우 현재 실행 중인 작업이 완료될 때까지 차단 대기 없이 취소()가 빠르게 실행되도록 보장됩니다.

작업 트리가 비어 있는 경우, 즉 기본 생성자로 구성된 경우 취소() 호출은 작동하지 않으며 관련 경고 메시지가 표시됩니다.

그렇지 않으면 작업 트리가 시작되지 않은 경우 취소() 호출은 무시됩니다.

참고: 실행 중인 작업의 핸들러나 작업 트리의 시그널에서 이 함수를 직접 호출하지 마세요.

~QTaskTree()도 참조하세요 .

[signal] void QTaskTree::done(QtTaskTree::DoneWith result)

이 신호는 작업 트리가 완료되어 실행의 마지막 result 을 전달할 때 발생합니다. 작업 트리는 이 신호가 방출된 후에는 어떤 핸들러도 호출하지 않으며 더 이상 신호를 방출하지 않습니다.

참고: 이 신호의 핸들러에서 작업 트리를 직접 삭제하지 마세요. 대신 deleteLater()를 사용하세요.

started()도 참조하세요 .

[override virtual protected] bool QTaskTree::event(QEvent *event)

다시 구현합니다: QObject::event(QEvent *e).

bool QTaskTree::isRunning() const

작업 트리가 현재 실행 중이면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

start() 및 cancel()도 참조하세요 .

template <typename StorageStruct, typename Handler> void QTaskTree::onStorageDone(const QtTaskTree::Storage<StorageStruct> &storage, Handler &&handler)

실행 중인 작업 트리에서 최종 데이터를 동적으로 검색하기 위해 storagehandler 저장소를 설치합니다.

StorageHandlerStorageStruct 인스턴스에 대한 const 참조를 사용합니다:

정적 QByteArray load(const QString &fileName) { ... }  Storage<QByteArray> storage;const auto onLoaderSetup = [](QThreadFunction<QByteArray> &task) { task.setThreadFunctionData(&load, "foo.txt"); };const auto onLoaderDone = [storage](const QThreadFunction<QByteArray> &task) { *storage = task.result(); };const Group root { storage,    QThreadFunctionTask(onLoaderSetup, onLoaderDone, CallDoneFlag::OnSuccess) };QTaskTree taskTree(root);auto collectStorage = [](const QByteArray &storage){    qDebug() << "final content" << storage;
}; taskTree.onStorageDone(storage, collectStorage); taskTree.start();

실행 중인 태스크 트리가 storage 이 배치된 Group 을 떠나려고 하면 StorageStruct 인스턴스를 소멸시킵니다. StorageStruct 인스턴스가 파괴되기 직전, 그리고 이 그룹에서 가능한 모든 핸들러가 호출된 후에 태스크 트리는 전달된 handler 을 호출합니다. 이렇게 하면 지정된 스토리지의 최종 콘텐츠를 동적으로 읽고 작업 트리 외부에서 추가로 처리할 수 있습니다.

이 핸들러는 실행 중인 트리가 취소될 때도 호출됩니다. 그러나 실행 중인 트리가 소멸될 때는 호출되지 않습니다.

onStorageSetup()도 참조하세요 .

template <typename StorageStruct, typename Handler> void QTaskTree::onStorageSetup(const QtTaskTree::Storage<StorageStruct> &storage, Handler &&handler)

초기 데이터를 실행 중인 작업 트리에 동적으로 전달하기 위해 storage 에 대한 스토리지 설정 handler 을 설치합니다.

StorageHandlerStorageStruct 인스턴스에 대한 참조를 사용합니다:

static void save(const QString &fileName, const QByteArray &array) { ... }

Storage<QByteArray> storage;

const auto onSaverSetup = [storage](QThreadFunction<QByteArray> &task) {
    task.setThreadFunctionData(&save, "foo.txt", *storage);
};

const Group root {
    storage,
    QThreadFunctionTask(onSaverSetup)
};

QTaskTree taskTree(root);
auto initStorage = [](QByteArray &storage){
    storage = "initial content";
};
taskTree.onStorageSetup(storage, initStorage);
taskTree.start();

실행 중인 작업 트리가 storage 가 배치된 그룹에 들어가면 StorageStruct 인스턴스를 만들어 이 그룹 내에서 사용할 수 있도록 준비합니다. StorageStruct 인스턴스가 생성된 직후, 그리고 이 그룹의 핸들러가 호출되기 전에 작업 트리는 전달된 handler 을 호출합니다. 이렇게 하면 지정된 스토리지에 대한 초기 콘텐츠를 동적으로 설정할 수 있습니다. 나중에 그룹의 핸들러가 호출되면 작업 트리는 생성되고 초기화된 스토리지를 활성화하여 모든 그룹의 핸들러 내에서 사용할 수 있도록 합니다.

onStorageDone()도 참조하세요 .

qsizetype QTaskTree::progressMaximum() const

최대 progressValue()를 반환합니다.

참고: 현재는 taskCount()와 동일합니다. 향후 변경될 수 있습니다.

progressValue()도 참조하세요 .

qsizetype QTaskTree::progressValue() const

0progressMaximum() 사이에 있는 현재 진행률 값을 반환합니다.

반환된 숫자는 작업 트리가 실행되는 동안 이미 완료, 취소 또는 건너뛴 작업의 수를 나타냅니다. 작업 트리가 시작되면 이 숫자는 0 로 설정됩니다. 작업 트리가 완료되면 이 숫자는 항상 progressMaximum()와 같습니다.

progressMaximum() 및 progressValueChanged()도 참조하세요 .

[signal] void QTaskTree::progressValueChanged(qsizetype value)

이 신호는 실행 중인 작업 트리에서 일부 작업이 완료, 취소 또는 건너뛰었을 때 발생합니다. value 은 현재 완료, 취소 또는 건너뛴 작업의 총 개수를 알려줍니다. 작업 트리가 시작되고 started() 신호가 전송된 후 이 신호는 0 의 초기 value 와 함께 전송됩니다. 작업 트리가 곧 완료되고 done() 신호가 전송되기 전에 이 신호는 progressMaximum() 의 마지막 value 과 함께 전송됩니다.

progressValue() 및 progressMaximum()도 참조하세요 .

QtTaskTree::DoneWith QTaskTree::runBlocking()

QEventLoop::ExcludeUserInputEvents 로 로컬 이벤트 루프를 실행하고 작업 트리를 시작합니다.

작업 트리가 성공적으로 완료되면 DoneWith::Success 을 반환하고, 그렇지 않으면 DoneWith::Error 을 반환합니다.

참고: 메인 스레드에서는 이 메서드를 사용하지 마세요. 대신 비동기 start()를 사용하세요. 이 메서드는 메인 스레드가 아닌 곳이나 자동 테스트에서 사용해야 합니다.

start()도 참조하세요 .

[static] QtTaskTree::DoneWith QTaskTree::runBlocking(const QtTaskTree::Group &recipe)

전달된 recipe 을 사용하여 임시 작업 트리를 생성하고 이를 차단하여 실행합니다.

작업 트리가 성공적으로 완료되면 DoneWith::Success 을 반환하고, 그렇지 않으면 DoneWith::Error 을 반환합니다.

참고: 메인 스레드에서는 이 메서드를 사용하지 마세요. 대신 비동기 start()를 사용하세요. 이 메서드는 메인 스레드가 아닌 스레드나 자동 테스트에서 사용해야 합니다.

start()도 참조하세요 .

QtTaskTree::DoneWith QTaskTree::runBlocking(const QFuture<void> &future)

전달된 future 은 취소 이벤트를 수신하는 데 사용됩니다. 작업 트리가 취소되면 이 메서드는 전달된 future 을 취소합니다.

이 함수는 QTaskTree::runBlocking()를 오버로드합니다.

[static] QtTaskTree::DoneWith QTaskTree::runBlocking(const QtTaskTree::Group &recipe, const QFuture<void> &future)

전달된 future 은 취소 이벤트를 수신하는 데 사용됩니다. 작업 트리가 취소되면 이 메서드는 전달된 future 을 취소합니다.

이 함수는 QTaskTree::runBlocking(const Group &recipe)을 오버로드합니다.

void QTaskTree::setRecipe(const QtTaskTree::Group &recipe)

작업 트리에 지정된 recipe 을 설정합니다. 작업 트리가 시작되면 recipe 안에 포함된 작업을 실행하고 전달된 설명에 따라 완료된 작업을 처리합니다.

참고: 실행 중인 작업 트리에 대해 호출하면 호출이 무시됩니다.

QTaskTree(const QtTaskTree::Group &recipe, QObject *parent = nullptr) 및 start()도 참조하세요 .

void QTaskTree::start()

작업 트리를 시작합니다.

setRecipe() 또는 생성자를 사용하여 작업 트리가 포함된 작업을 실행하고 완료된 작업을 처리할 선언적 설명을 설정합니다.

작업 트리가 비어 있는 경우, 즉 기본 생성자를 사용하여 구성된 경우 start() 호출은 작동하지 않으며 관련 경고 메시지가 표시됩니다.

그렇지 않으면 작업 트리가 이미 실행 중이면 start() 호출이 무시되고 관련 경고 메시지가 표시됩니다.

그렇지 않으면 작업 트리가 시작됩니다.

시작된 작업 트리는 메인 그룹의 시작 핸들러가 SetupResult::StopWithError 을 반환하는 경우와 같이 동기적으로 완료될 수 있습니다. 따라서 start()를 호출하기 전에 완료 신호에 대한 연결이 설정되어야 합니다. start() 호출 후 작업 트리가 여전히 실행 중인지 감지하려면 isRunning()를 사용하세요.

작업 트리 구현은 실행 중인 이벤트 루프에 의존합니다. 이 메서드를 호출할 때 QEventLoop, QCoreApplication 또는 그 하위 클래스 중 하나가 실행 중이거나 실행될 예정인지 확인하세요.

QTaskTree(const QtTaskTree::Group &recipe, QObject *parent = nullptr), setRecipe(), isRunning() 및 cancel()도 참조하세요 .

[signal] void QTaskTree::started()

이 신호는 작업 트리가 시작될 때 전송됩니다. 이 신호가 방출되면 초기 0 값을 가진 progressValueChanged() 신호가 동시에 뒤따릅니다.

start() 및 done()도 참조하세요 .

qsizetype QTaskTree::taskCount() const

저장된 레시피에 포함된 비동기 작업의 수를 반환합니다.

참고: 반환된 숫자에는 QSyncTask 작업이 포함되지 않습니다.

참고: withTimeout()을 사용하여 설정된 모든 작업 또는 그룹은 총 작업 수를 1 만큼 증가시킵니다.

setRecipe() 및 progressMaximum()도 참조하세요 .

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