如何:使用进程任务队列

示例

默认进程任务队列将线程池用于工作和完成调度。 采用任务队列参数的 Microsoft 游戏开发工具包(GDK)API 都接受 nullptr 并替代进程任务队列。 可替换该进程任务队列, 也可将其设置为 nullptr。 在这种情况下,需要任务队列参数的 Microsoft 游戏开发工具包(GDK)API 将出错,并返回 E_NO_TASK_QUEUE。 这允许 Microsoft 游戏开发工具包(GDK)API 以默认值运行,同时根据需要仍允许紧密控制任务队列句柄。

下面的示例显示如何使用进程任务队列。

void UsingProcessTaskQueue()  
{  
    XTaskQueueHandle queue = GetCurrentProcessTaskQueue();  
  
    auto callback = [](void*, bool)  
    {  
        printf("Work callback invoked.\r\n");  
    };  
  
    HRESULT hr = XTaskQueueSubmitCallback(  
        queue, XTaskQueuePort::Work,  
        nullptr, callback);  
  
    if (FAILED(hr))  
    {  
        printf("Failed to submit callback: %x\r\n", hr);  
        return;  
    }  
  
    // You can replace the process task queue.  
    hr = XTaskQueueCreate(  
        XTaskQueueDispatchMode::Manual,  
        XTaskQueueDispatchMode::Manual,  
        &queue);  
  
    if (FAILED(hr))  
    {  
        printf("Failed to create new task queue: %x\r\n", hr);  
        return;  
    }  
  
    XTaskQueueSetCurrentProcessTaskQueue(queue);  
  
    XTaskQueueHandle processQueue;  
    XTaskQueueGetCurrentProcessTaskQueue(&processQueue);  
    printf("Process task queue: %p. Our queue: %p\r\n",  
        processQueue, queue);  
    XTaskQueueCloseHandle(processQueue);  
  
    // You can set the process queue to nullptr to force everyone to pass a queue  
    // as a parameter.  
    XTaskQueueSetCurrentProcessTaskQueue(nullptr);  
    XTaskQueueGetCurrentProcessTaskQueue(&processQueue);  
    printf("Process task queue: %p.\r\n",  
        processQueue);  
}  

另请参阅

设计任务队列