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는 잠금이 없습니다.
- XTaskQueueSubmitCallback
- XTaskQueueSubmitDelayedCallback
- XTaskQueueDispatch, timeoutInMs에 대해 0이 전달된 경우
다음 예제에서는 작업 큐의 작업 또는 완료 포트에 콜백이 전송되는 방법을 보여줍니다. 먼저 작업 콜백을 제출하고 작업 콜백이 끝나면 일반적으로 완료 콜백을 제출합니다.
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 콘솔