XTaskQueueDispatch

处理给定端口的任务队列中的项。

语法

bool XTaskQueueDispatch(  
         XTaskQueueHandle queue,  
         XTaskQueuePort port,  
         uint32_t timeoutInMs  
)  

参数

queue _In_
类型:XTaskQueueHandle

要调度工作的队列。

port _In_
类型:XTaskQueuePort

要调度的端口。

timeoutInMs _In_
类型:uint32_t

在返回 false 前等待工作到达的毫秒数。 可以传递 INFINITE 来永久等待。

返回值

类型:bool

如果此函数调度了一个调用,则返回 true;否则返回 false。 如果队列已终止,即使传递了 INFINITE 作为超时值,此函数也将返回 false。

备注

您可以传递超时值,这将导致 XTaskQueueDispatch 等待队列中的某项到达。

如果任务队列端口是使用 XTaskQueueDispatchMode::ThreadPoolXTaskQueueDispatchMode::SerializedThreadPoolXTaskQueueDispatchMode::Immediate 创建的,调度模式将自动调度回调。 对于手动调度端口,您需要调用 XTaskQueueDispatch。 可以为任何调度模式调用 XTaskQueueDispatch,但是请注意一个调用始终在调用 XTaskQueueDispatch 的线程上调度。

警报 性能注意事项:
将某项添加到队列需要锁定并等待释放,以便满足上游代码的性能要求。 以下 API 是无锁的:

警报 性能注意事项:
从工作端口处理项时,XTaskQueueDispatch 所用的时间是可变的,并且取决于正在执行的工作。 在某些情况下,调用线程可能阻止等待其他系统工作完成。

以下示例显示如何使用 XTaskQueueDispatch 函数来处理任务队列中的项。

注意

SubmitCallback是一个帮助程序函数,它在代码示例中定义用于 XTaskQueueSubmitCallback 函数。

void CreatingTaskQueueWithManualThreads()
{
    // Create a manual task queue
    XTaskQueueHandle queue;
    HRESULT hr = XTaskQueueCreate(XTaskQueueDispatchMode::Manual, XTaskQueueDispatchMode::Manual, &queue);
    if (FAILED(hr))
    {
        printf("Creating queue failed: 0x%x\r\n", hr);
        return;
    }

    // We create threads to pump the queue: one for the work port
    // and one for the completion port.
    std::thread workThread([queue]
    {
        while (XTaskQueueDispatch(queue, XTaskQueuePort::Work, INFINITE));
    });

    std::thread completionThread([queue]
    {
        while (XTaskQueueDispatch(queue, XTaskQueuePort::Completion, INFINITE));
    });

    SubmitCallbacks(queue);

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

    // Terminating the queue will cause a waiting DispatchTaskQueue to return
    // false.  
    XTaskQueueTerminate(queue, true, nullptr, nullptr);

    workThread.join();
    completionThread.join();
}

要求

头文件:XTaskQueue.h

库:xgameruntime.lib

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

另请参阅

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