Skip to main content
本主題說明搭配 Microsoft Game Development Kit (GDK) 非同步設計模式使用的 Microsoft Game Development Kit (GDK) 工作佇列。工作佇列 是用於將工作和完成工作回呼排入佇列的 API。工作佇列可以設定為數種不同分派模式之一,包括手動分派機制,您可以使用該機制 仔細管理遊戲工作負載。

工作佇列 API 概觀

工作佇列是由兩個佇列連接埠組合而成:工作連接埠和 完成連接埠。這些連接埠會綁定在同一個物件中,因為您 通常兩者都需要:工作連接埠用於執行非同步工作,而 完成連接埠用於將其告知使用者。 工作佇列的說明如下。
  • 包含兩個工作佇列連接埠。
  • 每個工作佇列連接埠都可以有自己的分派模式,此模式決定 佇列中的項目如何分派。
  • 分派模式的範圍從透過 系統執行緒集區完全自動分派,到必須 明確移除工作的完全手動分派。
  • 回呼可以提交至佇列的任一連接埠。
  • 佇列以控制代碼表示。控制代碼可以複製,這基本上 會增加佇列的參考計數。
您可以指定分派模式,以個別設定每個工作佇列連接埠。分派模式會決定如何處理 排入連接埠佇列的回呼。分派模式有數種。
  • 執行緒集區: 排入執行緒集區佇列的回呼會在 系統執行緒集區上執行。執行緒集區會平行叫用 呼叫,每當有執行緒集區執行緒可用時,就依序從佇列取出 要執行的呼叫。
  • 序列化執行緒集區: 回呼會排入佇列並在 執行緒集區上執行,但會逐一執行,而不是在所有執行緒集區執行緒上 平行執行。
  • 手動: 排入手動佇列的回呼不會自動 分派。您可以自行決定在任何想要的執行緒上 分派它們。如果您使用手動工作佇列,必須確保您 也會提取 Windows 訊息佇列。
  • 立即: 立即分派模式完全不會排入佇列。它會 立即在提交回呼的執行緒上執行 該呼叫。
工作佇列控制代碼是可共用的資源。關閉控制代碼會釋放 佇列上的一個參考。在所有參考都釋放之前,佇列實際上 不會終結。XTaskQueueDuplicateHandle、 XTaskQueueSubmitCallback、XTaskQueueSubmitDelayedCallback 和 XTaskQueueCreateComposite 都會為佇列控制代碼新增參考。這 表示在所有回呼完成之前,佇列實際上 不會終結。 工作佇列控制代碼是每個處理序專屬的資源,無法封送處理或 在處理序之外使用。

使用模式

工作佇列的典型使用模式如下。
  1. 建立工作佇列控制代碼,然後為每個連接埠指定分派模式。
  2. 如果您使用手動分派,請建立應用程式專屬的執行緒,以 呼叫佇列的分派函式。
  3. 將佇列當作 Microsoft Game Development Kit (GDK) 呼叫的參數使用,或直接 使用 XTaskQueueCallback 提交。
  4. (選擇性) 在應用程式關閉時終止工作佇列。

非同步工作佇列操作說明主題

本節提供常見非同步工作佇列案例的操作說明範例。

本節內容

建立執行緒集區工作佇列 提供範例,示範如何建立工作佇列,以在系統執行緒集區上分派工作回呼和完成回呼。 提交回呼 提供範例,示範如何將回呼提交至工作佇列的工作連接埠或完成連接埠。 複製工作佇列控制代碼 提供範例,示範如何複製工作佇列控制代碼。如果您有長時間執行的工作,可能會想要在工作期間複製工作佇列控制代碼。如此一來,在您仍需要佇列時,任何呼叫 XTaskQueueCloseHandle 的人都不會關閉該佇列。 建立手動工作佇列 提供範例,示範如何建立以手動方式提取的工作佇列。它會建立兩個 STL 執行緒,分別為工作連接埠和完成連接埠分派呼叫。 使用事件控制手動佇列分派 提供範例,示範如何在工作佇列有項目要分派時,使用工作佇列對條件變數發出訊號。 搭配 Windows 訊息迴圈使用工作佇列 提供範例,使用執行緒集區處理工作,但將完成連接埠回呼整合至 Win32 視窗程序。此範例也示範了在將工作佇列與其他執行緒模型整合時,如何正確終止工作佇列。 使用處理序工作佇列 提供範例,示範如何使用處理序工作佇列。預設的處理序工作佇列會使用執行緒集區進行工作分派和完成分派。 建立複合工作佇列 提供範例,使用執行緒集區處理工作,但將完成連接埠回呼整合至 Win32 WindowProc 回呼函式。此範例也示範了在將工作佇列與其他執行緒模型整合時,如何正確終止工作佇列。 使用延遲回呼 提供範例,示範如何使用延遲回呼,每 500 毫秒叫用一次回呼,共叫用 10 次。使用工作佇列並透過 XTaskQueueSubmitDelayedCallback API,在未來的時間點提交回呼。如此一來,您可以在短暫延遲後重試失敗的呼叫,或將其當作定期事件的低成本計時器使用。 使用工作佇列等候程式 提供範例,示範如何使用工作佇列等候程式。您可以向工作佇列註冊 Win32 核心控制代碼。當控制代碼變成已發出訊號狀態時,您的回呼就會提交至佇列。

參考 API 文件

Last modified on October 6, 2026