이 페이지에서

QtTaskTree::QCustomTask Class

template <typename Task, typename Adapter = QtTaskTree::QDefaultTaskAdapter<Task>, typename Deleter = std::default_delete<Task>> class QtTaskTree::QCustomTask

사용자 지정 작업 항목을 선언하고 설정 및 완료 핸들러를 정의하는 데 사용되는 클래스 템플릿입니다. 더 보기...

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

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

공용 형

공용 함수

QCustomTask(SetupHandler &&setup = QCustomTask::TaskSetupHandler(), DoneHandler &&done = QCustomTask::TaskDoneHandler(), QtTaskTree::CallDone callDone = QtTaskTree::CallDoneFlag::Always)

상세 설명

태스크 트리 레시피 내의 사용자 지정 태스크 항목을 설명합니다.

사용자 지정 작업 이름은 지정된 작업, 어댑터 및 삭제기와 함께 QCustomTask 템플릿을 사용하여 고유한 이름으로 별칭을 지정합니다. 예를 들어 QThreadFunctionTask<T>는 연결된 작업 클래스로 QThreadFunction<T>와 함께 작동하도록 정의된 QCustomTask의 별칭입니다. 다음 표에는 TaskTree 라이브러리에서 제공하는 사용자 지정 작업과 관련 작업 클래스가 나와 있습니다:

별칭 작업 이름연관된 작업 클래스간단한 설명
QBarrierTaskQBarrier대기 태스크를 시작합니다.
QThreadFunctionTask<ReturnType>QThreadFunction<ReturnType>비동기 작업을 시작합니다. 별도의 스레드에서 실행됩니다.
QProcessTaskQProcess프로세스를 시작합니다.
QNetworkReplyWrapperTaskQNetworkReplyWrapper네트워크 쿼리를 보냅니다.
QTaskTreeTaskQTaskTree중첩된 작업 트리를 시작합니다.
QTcpSocketWrapperTaskQTcpSocketWrapperTCP 연결을 설정합니다.
QTimeoutTaskstd::chrono::milliseconds타이머를 시작합니다.

Task 템플릿 매개 변수는 필수이며, 실행 중인 QTaskTree 이 레시피의 일부일 때 어떤 유형의 Task 을 인스턴스화할지 지정합니다. Task 유형은 기본 구성 가능 유형이어야 합니다.

Adapter 템플릿 인수는 선택 사항입니다. QDefaultTaskAdapter <작업>이 Task 유형을 적용해도 괜찮다면 건너뛸 수 있습니다. 그렇지 않으면 특정 Task 에 대한 Adapter 형식은 다음과 같아야 합니다:

class Adapter
{
public:
    void operator()(Task *task, QTaskInterface *iface) { ... }
};

위의 연산자()를 구현하여 task 를 시작하고 작업이 완료되면 전달된 iface 에서 QTaskInterface::reportDone() 메서드를 호출합니다.

전달된 TaskQTaskInterfaceAdapter 보다 오래 지속됩니다. 필요한 경우 Adapter 의 소멸자는 전달된 Task 에 계속 액세스할 수 있습니다.

자세한 내용은 QTaskInterface 을 참조하세요.

Deleter 템플릿 인수는 선택 사항입니다. 기본적으로 std::default_delete<Task> 템플릿이 사용됩니다. 사용자 정의 Deleter 는 실행 중인 Task 의 소멸자가 호출자 스레드를 잠재적으로 차단할 수 있는 경우에 유용합니다. 사용자 지정 소멸자는 차단하는 대신 실행 중인 작업을 별도의 스레드로 이동하고 거기서 차단 소멸을 구현할 수 있습니다. 이렇게 하면 차단 소멸자를 사용하여 실행 중인 태스크의 빠른 소멸(호출자 스레드에서 볼 수 있음)을 달성할 수 있습니다.

QTaskInterface참조하세요 .

멤버 유형 문서

[alias] QCustomTask::TaskDoneHandler

별칭을 std::function<QtTaskTree::DoneResult(const Task &, QtTaskTree::DoneWith)> 또는 DoneResult 으로 입력합니다.

작업 완료 핸들러는 사용자 정의 작업 요소의 생성자의 선택적 인수입니다. 위의 서명이 있는 함수는 작업 완료 핸들러로 전달되면 작업 실행이 완료된 후 실행 중인 작업 트리에서 실행의 최종 결과가 부모 그룹에 다시 보고되기 전에 호출됩니다.

핸들러 본문 내에서 완료된 작업의 최종 데이터를 검색할 수 있습니다. 저장소를 포함한 추가 매개변수는 람다 캡처를 통해 핸들러에 전달될 수 있습니다. 작업이 반환 값으로 완료될지 아니면 최종 결과를 조정할지 여부를 동적으로 결정할 수도 있습니다.

DoneWith 인수는 선택 사항이며 완료 핸들러는 이를 생략할 수 있습니다. 제공되면 부모에게 보고될 작업의 최종 결과에 대한 정보를 보유합니다.

완료된 작업에서 데이터를 읽지 않으려는 경우 const Task & 인수를 생략할 수 있습니다.

반환되는 DoneResult 값은 선택 사항이며 핸들러는 대신 void 을 반환할 수 있습니다. 이 경우 작업의 최종 결과는 DoneResult 인수가 지정한 값과 동일합니다. 처리기가 DoneResult 값을 반환하면 작업의 최종 결과는 완료 처리기의 본문 내에서 반환된 값에 따라 조정될 수 있습니다.

DoneResult 유형의 작업 완료 처리기의 경우 추가 처리가 실행되지 않으며, 작업은 전달된 값 DoneResult 으로 무조건 완료됩니다.

QCustomTask(), TaskSetupHandler, GroupDoneHandler도 참조하세요 .

[alias] QCustomTask::TaskSetupHandler

std::function<SetupResult(Task &)> 에 대한 별칭을 입력합니다.

태스크 설정 핸들러는 사용자 지정 작업 요소의 생성자의 선택적 인수입니다. 위의 서명을 가진 함수가 작업 설정 핸들러로 전달되면 작업이 생성된 후 작업이 시작되기 전에 실행 중인 작업 트리에서 호출됩니다.

핸들러 본문에서 필요에 따라 작업을 구성할 수 있습니다. 저장소를 포함한 추가 매개변수는 람다 캡처를 통해 핸들러에 전달될 수 있습니다. 작업의 성공 또는 오류 발생 시 작업을 시작하거나 건너뛸지 여부를 동적으로 결정할 수 있습니다.

참고: 시작 핸들러 내에서 직접 작업을 시작하지 마세요. QTaskTree , 그렇지 않으면 동작이 정의되지 않습니다. QTaskTreeQCustomTask<Task, Adapter, Deleter> 생성자에 전달된 어댑터 템플릿 매개변수 덕분에 이미 작업을 시작하는 방법을 알고 있습니다.

핸들러의 반환 값은 핸들러의 호출이 완료된 후 실행 중인 작업 트리에 진행 방법을 지시합니다. SetupResult::Continue 의 반환 값은 태스크 트리가 계속 실행되도록, 즉 연결된 Task 을 실행하도록 지시합니다. SetupResult::StopWithSuccess 또는 SetupResult::StopWithError 의 반환 값은 작업 트리에 작업 실행을 건너뛰고 성공 또는 오류로 즉시 완료하도록 각각 지시합니다.

반환 유형이 SetupResult::StopWithSuccess 또는 SetupResult::StopWithError 인 경우 작업의 완료 핸들러(제공된 경우)는 나중에 호출되지 않습니다.

사용자 지정 작업의 생성자는 std::function<void(Task &)> 의 단축된 형식, 즉 반환 값이 void 인 함수도 허용합니다. 이 경우 반환 값은 SetupResult::Continue 로 가정합니다.

QCustomTask(), TaskDoneHandler, GroupSetupHandler도 참조하세요 .

멤버 함수 문서

[explicit] template < typename SetupHandler = QtTaskTree::QCustomTask<Task, Adapter, Deleter>::TaskSetupHandler, typename DoneHandler = QtTaskTree::QCustomTask<Task, Adapter, Deleter>::TaskDoneHandler, std::enable_if_t<!std::is_same_v<q20::remove_cvref_t<SetupHandler>, QCustomTask<Task, Adapter, Deleter>>, bool> = true > QCustomTask::QCustomTask(SetupHandler &&setup = QCustomTask::TaskSetupHandler(), DoneHandler &&done = QCustomTask::TaskDoneHandler(), QtTaskTree::CallDone callDone = QtTaskTree::CallDoneFlag::Always)

QCustomTask 인스턴스를 생성하고 setupdone 핸들러를 태스크에 연결합니다. 실행 중인 작업 트리가 작업을 시작하려고 하면 연결된 Task 개체를 인스턴스화하고, 생성된 작업에 대한 참조로 setup 핸들러를 호출한 다음 작업을 시작합니다. 실행 중인 작업이 완료되면 작업 트리는 생성된 작업에 대한 const 참조를 사용하여 done 핸들러를 호출합니다.

전달된 setup 핸들러는 TaskSetupHandler 유형입니다. 예를 들어

static void parseAndLog(const QString &input);

...

const QString input = ...;

const auto onFirstSetup = [input](QThreadFunction<void> &task) {
    if (input == "Skip")
        return SetupResult::StopWithSuccess; // This task won't start, the next one will
    if (input == "Error")
        return SetupResult::StopWithError; // This task and the next one won't start
    task.setThreadFunctionData(parseAndLog, input);
    // This task will start, and the next one will start after this one finished with success
    return SetupResult::Continue;
};

const auto onSecondSetup = [input](QThreadFunction<void> &task) {
    task.setThreadFunctionData(parseAndLog, input);
};

const Group group {
    QThreadFunctionTask<void>(onFirstSetup),
    QThreadFunctionTask<void>(onSecondSetup)
};

done 처리기는 TaskDoneHandler 유형입니다. 기본적으로 done 처리기는 작업이 완료될 때마다 호출됩니다. 실행이 성공, 실패 또는 취소된 경우에만 처리기가 호출되도록 하려면 callDone 인수에 기본값이 아닌 값을 전달하세요.

TaskSetupHandlerTaskDoneHandler참조하세요 .

관련 비회원

[alias] QBarrierTask

레시피 내에서 사용할 QCustomTask<QBarrier>의 별칭을 입력합니다.

[alias] QNetworkReplyWrapperTask

레시피 내에서 사용할 QCustomTask<QNetworkReplyWrapper>의 별칭을 입력합니다.

[alias] QProcessTask

레시피 내에서 사용할 QCustomTask<QProcess>의 별칭을 QProcessTaskDeleter 을 사용하여 입력합니다.

[alias] QTaskTreeTask

레시피 내에서 사용할 QCustomTask<QTaskTree>의 별칭을 입력합니다.

[alias] QTcpSocketWrapperTask

레시피 내에서 사용할 QCustomTask<QTcpSocketWrapper>의 별칭을 입력합니다.

[alias] template <typename ResultType> QThreadFunctionTask

레시피 내에서 사용할 QCustomTask<QThreadFunction<ResultType>>에 대한 별칭을 입력합니다.

[alias] QTimeoutTask

레시피 내에서 사용할 QCustomTask<std::chrono::milliseconds> 의 별칭을 입력합니다. std::chrono::milliseconds 은 시간 초과 기간을 설정하는 데 사용됩니다. 기본 시간 제한은 std::chrono::milliseconds::zero() 이며, 즉 컨트롤이 실행 중인 이벤트 루프로 돌아가는 즉시 QTimeoutTask가 완료됩니다.

사용 예시:

using namespace std::chrono;
using namespace std::chrono_literals;

const auto onSetup = [](milliseconds &timeout) { timeout = 1000ms; }
const auto onDone = [] { qDebug() << "Timed out."; }

const Group root {
    QTimeoutTask(onSetup, onDone)
};

timeoutTask()도 참조하세요 .

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