> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 如何：使用进程任务队列

> 如何：使用进程任务队列

## 示例

默认的*进程任务队列*同时使用线程池来分派工作和完成回调。接受任务队列参数的 Microsoft Game Development Kit (GDK) API 都接受 `nullptr` 并替换为进程任务队列。它可以被替换。进程任务队列也可以设置为 `nullptr`。在这种情况下，需要任务队列参数的 Microsoft Game Development Kit (GDK) API 将会以 `E_NO_TASK_QUEUE` 报错。这允许 Microsoft Game Development Kit (GDK) API 在默认设置下工作，同时在需要时仍然可以对任务队列句柄进行严格控制。

以下示例展示了如何使用进程任务队列。

```c++ theme={null}
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);  
}  
```

## 另请参阅

[设计任务队列](/build/core-features/common/async/async-task-queue-design)


## Related topics

- [如何：使用任务队列等待器](/zh-CN/build/core-features/common/async/async-task-queue-design-howto/using-task-queue-waiter.md)
- [如何：将任务队列与 Windows 消息循环结合使用](/zh-CN/build/core-features/common/async/async-task-queue-design-howto/task-queue-windows-msg-loop.md)
- [异步任务队列设计](/zh-CN/build/core-features/common/async/async-task-queue-design.md)
- [XTaskQueueGetCurrentProcessTaskQueue](/zh-CN/reference/system/xtaskqueue/functions/xtaskqueuegetcurrentprocesstaskqueue.md)
- [XAsyncBlock](/zh-CN/reference/system/xasync/structs/xasyncblock.md)
