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 成员
异步编程模型
异步任务队列设计