다음을 통해 공유


방법: 콜백 제출

예시

다음 예시에서는 작업 큐의 작업 포트 또는 완료 포트에 콜백을 전송하는 방법을 보여줍니다. 먼저, 작업 콜백을 제출합니다. 그 다음에 작업 콜백이 끝나면 완료 콜백을 제출합니다. 이는 일반적인 사용 방법입니다. SubmitCallbacks 함수는 후속 시나리오에서 간결하게 사용됩니다.

void CALLBACK SampleCompletionCallback(void*, bool cancel)
{
    printf("Completion invoked on thread %d. Cancel? %d.\r\n",
    GetCurrentThreadId(), cancel);
}

void CALLBACK SampleWorkCallback(void* context, bool cancel)
{
    printf("Worker invoked on thread %d. Cancel? %d.\r\n",
    GetCurrentThreadId(), cancel);

    XTaskQueueHandle queueFromContext = static_cast<XTaskQueueHandle>(context);

    HRESULT hrCompletion = XTaskQueueSubmitCallback(
        queueFromContext,
        XTaskQueuePort::Completion,
        nullptr,
        SampleCompletionCallback);

    if (FAILED(hrCompletion))
    {
        printf("Error 0x%x submitting completion.\r\n", hrCompletion);
    }
}

void SubmitCallbacks(XTaskQueueHandle queue)
{
    HRESULT hrWork = XTaskQueueSubmitCallback(
        queue,
        XTaskQueuePort::Work,
        queue,
        SampleWorkCallback);

    if (FAILED(hrWork))
    {
        printf("Error 0x%x submitting work.\r\n", hrWork);
    }
}

참고 항목

작업 큐 디자인