XTaskQueueCreateComposite

创建一个由其他任务队列的端口组成的任务队列。

语法

HRESULT XTaskQueueCreateComposite(  
         XTaskQueuePortHandle workPort,  
         XTaskQueuePortHandle completionPort,  
         XTaskQueueHandle* queue  
)  

参数

workPort _In_
类型:XTaskQueuePortHandle

要用于排队工作回调的端口。

completionPort _In_
类型:XTaskQueuePortHandle

要用于排队完成回调的端口。

queue _Out_
类型:XTaskQueueHandle*

新创建的队列。

返回值

类型:HRESULT

HRESULT 成功或错误代码。

备注

注意

在时间敏感线程上调用此函数是不安全的。 有关详细信息,请参阅时间敏感线程

任务队列是对引用计数的对象。 通过调用 XTaskQueueCloseHandle 释放引用。

任务队列具有工作端口和完成端口,任务可在任一端口排队。 每个端口可以使用自己的调度模式来配置。

对于大多数情形,您可以使用 XTaskQueueCreate API 创建一个任务队列。 但是,如果您正在将多个异步调用串接在一起,有时通过 XTaskQueueCreateComposite 创建一个复合队列很有用。 请考虑一个 API,其实现需要调用另一个使用某任务队列的 API。 你可能希望重定向该 API 的完成回调,以便它不会阻碍调用方的完成线程。 在这种情况下,您可以创建一个复合任务队列,其工作端口和完成端口都从另一队列的工作端口生成。

以下示例创建一个复合任务队列。

void CreatingCompositeQueue()
{
    XTaskQueueHandle queue;

    HRESULT hr = XTaskQueueCreate(
        XTaskQueueDispatchMode::ThreadPool, 
        XTaskQueueDispatchMode::Manual, 
        &queue);

    if (FAILED(hr))
    {
        printf("failed to create task queue: 0x%x\r\n", hr);
        return;
    }

    XTaskQueuePortHandle workPort;

    // Create a composite queue that uses the work port from
    // another queue for both work and completion ports.

    hr = XTaskQueueGetPort(queue, XTaskQueuePort::Work, &workPort);
    if (FAILED(hr))
    {
        printf("failed to get work port 0x%x\r\n", hr);
        XTaskQueueCloseHandle(queue);
        return;
    }

    XTaskQueueHandle compositeQueue;
    hr = XTaskQueueCreateComposite(workPort, workPort, &compositeQueue);
    if (FAILED(hr))
    {
        printf("failed to create composiute queue 0x%x\r\n", hr);
        XTaskQueueCloseHandle(queue);
        return;
    }

    // Use the queue as needed
    SubmitCallbacks(compositeQueue);

    // Wait a while for the callbacks to run
    Sleep(1000);

    XTaskQueueCloseHandle(compositeQueue);
    XTaskQueueCloseHandle(queue);
}

要求

头文件:XTaskQueue.h

库:xgameruntime.lib

支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机

另请参阅

XTaskQueue 成员
异步编程模型
异步任务队列设计