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,前提是将 0 传递给 timeoutInMs
以下示例演示如何将回调提交到任务队列的工作端口或完成端口。 它首先提交一个工作回调,然后在工作回调结束时提交一个完成回调(通常如此)。
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 主机