IDXGIDevice2::EnqueueSetEvent メソッド (dxgi1_2.h)
未処理のレンダリング コマンドをすべてフラッシュし、以前に送信されたすべてのレンダリング コマンドが完了した後、指定したイベント オブジェクトをシグナル状態に設定します。
構文
HRESULT EnqueueSetEvent(
[in] HANDLE hEvent
);
パラメーター
[in] hEvent
イベント オブジェクトへのハンドル。 CreateEvent 関数または OpenEvent 関数は、このハンドルを返します。 すべての種類のイベント オブジェクト (手動リセット、自動リセットなど) がサポートされています。
ハンドルには、EVENT_MODIFY_STATEアクセス権が必要です。 アクセス権の詳細については、「 同期オブジェクトのセキュリティとアクセス権」を参照してください。
戻り値
成功した場合 は、S_OK を返します。それ以外の場合は、次のいずれかの値を返します。
- 操作を 完了するために十分なメモリが使用できない場合は、E_OUTOFMEMORYします。
- パラメーター が検証され、正しくないと判断された場合にE_INVALIDARGします。
注釈
EnqueueSetEvent は、以前に送信されたすべてのレンダリング コマンドが完了したか、デバイスが削除された後に、イベント オブジェクトに 対して SetEvent 関数を呼び出します。
アプリケーションが EnqueueSetEvent を呼び出した後、 すぐに WaitForSingleObject 関数を 呼び出して、レンダリング コマンドが完了するまでスリープ状態にすることができます。
EnqueueSetEvent を使用して、プレゼンテーション (IDXGISwapChain::P resent) に関連付けられている作業完了を確認することはできません。代わりに、IDXGISwapChain::GetFrameStatistics を使用することをお勧めします。
例
次のコード例は 、EnqueueSetEvent の使用方法を示しています。
void BlockingFinish( IDXGIDevice2* pDevice )
{
// Create a manual-reset event object.
hEvent = CreateEvent(
NULL, // default security attributes
TRUE, // manual-reset event
FALSE, // initial state is nonsignaled
FALSE
);
if (hEvent == NULL)
{
printf("CreateEvent failed (%d)\n", GetLastError());
return;
}
pDevice->EnqueueSetEvent(hEvent);
DWORD dwWaitResult = WaitForSingleObject(
hEvent, // event handle
INFINITE); // indefinite wait
switch (dwWaitResult)
{
// Event object was signaled
case WAIT_OBJECT_0:
// Commands completed
break;
// An error occurred
default:
printf("Wait error (%d)\n", GetLastError());
return 0;
}
CloseHandle(hEvent);
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 7 のWindows 8とプラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2008 R2 のWindows Server 2012とプラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | dxgi1_2.h |
Library | Dxgi.lib |