XTaskQueueSubmitCallback
特定のポートのキューにコールバックを送信します。
構文
HRESULT XTaskQueueSubmitCallback(
XTaskQueueHandle queue,
XTaskQueuePort port,
void* callbackContext,
XTaskQueueCallback* callback
)
パラメーター
queue _In_
型: XTaskQueueHandle
コールバックの送信先のキュー。
port _In_
型: XTaskQueuePort
コールバックの送信先のポート。 コールバックは、処理ポートまたは完了ポートに割り当てることができます。
callbackContext _In_opt_
型: void*
コールバックに渡されるオプションのコンテキスト ポインター。
callback _In_
型: XTaskQueueCallback*
コールバック関数に対するポインター。
戻り値
型: HRESULT
HRESULT 成功またはエラー コード。
解説
パフォーマンス 注:
キューへのアイテムの追加は、上流コードのパフォーマンス要件を満たすためには、ロック フリーかつ待機フリーであることが必要です。 次の API はロック フリーです。
- XTaskQueueSubmitCallback
- XTaskQueueSubmitDelayedCallback
- XTaskQueueDispatch, provided that 0 is passed for timeoutInMs
次の例では、タスク キューの作業ポートまたは完了ポートにコールバックが送信される方法を示します。 最初に作業コールバックを送信し、作業コールバックの終了時に完了コールバックを送信しますが、これが一般的です。
void CALLBACK SampleCompletionCallback(void*, bool cancel)
{
printf("Completion invoked on thread %d. Cancel? %d.\r\n", GetCurrentThreadId(), cancel);
}
void CALLBACK SampleWorkCallback(void* context, bool cancel)
{
printf("Worker invoked on thread %d. Cancel? %d.\r\n", GetCurrentThreadId(), cancel);
XTaskQueueHandle queueFromContext = static_cast<XTaskQueueHandle>(context);
HRESULT hrCompletion = XTaskQueueSubmitCallback(
queueFromContext,
XTaskQueuePort::Completion,
nullptr,
SampleCompletionCallback);
if (FAILED(hrCompletion))
{
printf("Error 0x%x submitting completion.\r\n", hrCompletion);
}
}
void SubmitCallbacks(XTaskQueueHandle queue)
{
HRESULT hrWork = XTaskQueueSubmitCallback(
queue,
XTaskQueuePort::Work,
queue,
SampleWorkCallback);
if (FAILED(hrWork))
{
printf("Error 0x%x submitting work.\r\n", hrWork);
}
}
要件
ヘッダー: XTaskQueue.h
ライブラリ: xgameruntime.lib
サポートされているプラットフォーム: Windows、Xbox One ファミリー本体、Xbox Series 本体