다음을 통해 공유


XTaskQueueSubmitCallback

지정된 포트의 큐에 콜백을 제출합니다.

구문

HRESULT XTaskQueueSubmitCallback(  
         XTaskQueueHandle queue,  
         XTaskQueuePort port,  
         void* callbackContext,  
         XTaskQueueCallback* callback  
)  

매개 변수

queue _In_
형식: XTaskQueueHandle

콜백을 제출할 큐입니다.

port _In_
형식: XTaskQueuePort

콜백을 제출할 포트입니다. 콜백은 작업 또는 완료 포트에 할당될 수 있습니다.

callbackContext _In_opt_
형식: void*

콜백에 전달할 선택적인 컨텍스트 포인터입니다.

callback _In_
형식: XTaskQueueCallback*

콜백 함수에 대한 포인터입니다.

반환 값

형식: HRESULT

HRESULT 성공 또는 오류 코드입니다.

설명

경고 성능 참고:
큐에 항목을 추가하려면 업스트림 코드의 성능 요구 사항을 충족시키기 위해 잠금 및 대기가 없어야 합니다. 다음 API는 잠금이 없습니다.

다음 예제에서는 작업 큐의 작업 또는 완료 포트에 콜백이 전송되는 방법을 보여줍니다. 먼저 작업 콜백을 제출하고 작업 콜백이 끝나면 일반적으로 완료 콜백을 제출합니다.

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);
    }
}

요구 사항

헤더: XTaskQueue.h

라이브러리: xgameruntime.lib

지원되는 플랫폼: Windows, Xbox One 패밀리 콘솔 및 Xbox Series 콘솔

참고 항목

XTaskQueue 멤버
비동기 프로그래밍 모델
비동기 작업 큐 디자인