> ## 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.

# 如何：使用任务队列等待器

> 如何：使用任务队列等待器

## 示例

你可以将一个 Win32 内核句柄注册到任务队列。当该句柄变为已发出信号状态时，你的回调将被提交到队列。通常，你会创建一个自动重置事件用于发出信号。如果句柄不是自动重置的，那么只要句柄仍处于已发出信号状态，当前回调完成后就会提交一个新的回调。

以下示例展示了如何使用任务队列等待器。

```c++ theme={null}
void CreatingTaskQueueWaiter()  
{  
    HANDLE waitEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);  
    if (waitEvent == nullptr)  
    {  
        printf("Error creating wait handle: %d\r\n", GetLastError());  
        return;  
    }  
  
    XTaskQueueHandle queue;  
  
    HRESULT hr = XTaskQueueCreate(  
        XTaskQueueDispatchMode::ThreadPool,  
        XTaskQueueDispatchMode::ThreadPool,  
        &queue);  
  
    if (FAILED(hr))  
    {  
        printf("Error creating task queue: %x\n", hr);  
        CloseHandle(waitEvent);  
        return;  
    }  
  
    auto callback = [](void*, bool)  
    {  
        printf("Callback invoked.\r\n");  
    };  
  
    XTaskQueueRegistrationToken token;  
  
    hr = XTaskQueueRegisterWaiter(  
        queue,  
        XTaskQueuePort::Completion,  
        waitEvent,  
        nullptr,  
        callback,  
        &token);  
  
    if (FAILED(hr))  
    {  
        printf("Error registering task queue waiter: %x\n", hr);  
        CloseHandle(waitEvent);  
        XTaskQueueCloseHandle(queue);  
        return;  
    }  
  
    // Now, whenever our wait event becomes signaled, the callback will be called.  
    for (uint32_t i = 0; i < 5; i++)  
    {  
        SetEvent(waitEvent);  
        Sleep(100);  
    }  
  
    // Note: Unregistering the waiter is optional.  
    XTaskQueueUnregisterWaiter(queue, token);  
    XTaskQueueCloseHandle(queue);  
    CloseHandle(waitEvent);  
}  
```

## 示例输出

```
Callback invoked.  
Callback invoked.  
Callback invoked.  
Callback invoked.  
Callback invoked.  
```

## 另请参阅

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


## Related topics

- [如何：使用进程任务队列](/zh-CN/build/core-features/common/async/async-task-queue-design-howto/using-process-task-queue.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)
- [如何：使用事件控制手动队列分派](/zh-CN/build/core-features/common/async/async-task-queue-design-howto/control-manual-queue-dispatching.md)
- [如何使用 XBOX 服务 API (XSAPI)](/zh-CN/services/xbox-services/fundamentals/xbox-services-api/live-gs-xbl-apis.md)
