XTaskQueueGetPort
指定されたポートのタスク キュー ポート ハンドルを返します。
構文
HRESULT XTaskQueueGetPort(
XTaskQueueHandle queue,
XTaskQueuePort port,
XTaskQueuePortHandle* portHandle
)
パラメーター
queue _In_
型: XTaskQueueHandle
ポートを取得するタスク キュー。
port _In_
型: XTaskQueuePort
取得するポート。
portHandle _Out_
型: XTaskQueuePortHandle*
指定されたポートのタスク キュー ポート ハンドル。
戻り値
型: HRESULT
HRESULT 成功またはエラー コード。
解説
注意
この関数は、時間依存のスレッドで呼び出すのに安全ではありません。 詳細については、「時間依存のスレッド」を参照してください。
タスク キュー ポート ハンドルはタスク キューによって所有されており、閉じる必要はありません。 複合タスク キューを作成するときに使用されます。
次の例では、処理ポートと完了ポートの両方が元のキューの処理ポートを使用する複合キューを作成します。 複合タスク キューは、他のキューのポートで構成されるタスク キューです。 複合タスク キューは、ある非同期タスクで別のタスクを呼び出す必要があり、そのタスクからの完了が、完了スレッドのサイクルを浪費してはならない中間ステップである場合に役立ちます。
注意
SubmitCallback は、 XTaskQueueSubmitCallback 関数のコード例で定義されているヘルパー関数です。
void CreatingCompositeQueue()
{
XTaskQueueHandle queue;
HRESULT hr = XTaskQueueCreate(
XTaskQueueDispatchMode::ThreadPool,
XTaskQueueDispatchMode::Manual,
&queue);
if (FAILED(hr))
{
printf("failed to create task queue: 0x%x\r\n", hr);
return;
}
XTaskQueuePortHandle workPort;
// Create a composite queue that uses the work port from
// another queue for both work and completion ports.
hr = XTaskQueueGetPort(queue, XTaskQueuePort::Work, &workPort);
if (FAILED(hr))
{
printf("failed to get work port 0x%x\r\n", hr);
XTaskQueueCloseHandle(queue);
return;
}
XTaskQueueHandle compositeQueue;
hr = XTaskQueueCreateComposite(workPort, workPort, &compositeQueue);
if (FAILED(hr))
{
printf("failed to create composiute queue 0x%x\r\n", hr);
XTaskQueueCloseHandle(queue);
return;
}
// Use the queue as needed
SubmitCallbacks(compositeQueue);
// Wait a while for the callbacks to run
Sleep(1000);
XTaskQueueCloseHandle(compositeQueue);
XTaskQueueCloseHandle(queue);
}
要件
ヘッダー: XTaskQueue.h
ライブラリ: xgameruntime.lib
サポートされているプラットフォーム: Windows、Xbox One ファミリー本体、Xbox Series 本体