如何:使用进程任务队列
示例
默认进程任务队列将线程池用于工作和完成调度。 采用任务队列参数的 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);
}