MFAllocateSerialWorkQueue 関数 (mfapi.h)
作業項目のシリアル化が保証される作業キューを作成します。 シリアル作業キューは、既存のマルチスレッド作業キューをラップします。 シリアル作業キューでは、先入れ先出し (FIFO) の実行順序が適用されます。
構文
HRESULT MFAllocateSerialWorkQueue(
[in] DWORD dwWorkQueue,
[out] DWORD *pdwWorkQueue
);
パラメーター
[in] dwWorkQueue
既存の作業キューの識別子。 これは、マルチスレッド キューまたは別のシリアル作業キューである必要があります。 次のいずれかを使用できます。
- 既定の作業キュー (MFASYNC_CALLBACK_QUEUE_STANDARD)
- プラットフォーム のマルチスレッド キュー (MFASYNC_CALLBACK_QUEUE_MULTITHREADED)
- MFLockSharedWorkQueue 関数によって返されるマルチスレッド キュー。
- MFAllocateSerialWorkQueue 関数によって作成されたシリアル キュー。
[out] pdwWorkQueue
新しいシリアル作業キューの識別子を受け取ります。 この識別子は、作業項目をキューに入れたときに使用します。
戻り値
この関数は、これらの値のいずれかを返すことができます。
リターン コード | 説明 |
---|---|
|
関数が正常に実行されました。 |
|
アプリケーションが作業キューの最大数を超えました。 |
|
アプリケーションが MFStartup を呼び出さなかったか、アプリケーションが 既に MFShutdown を呼び出しています。 |
解説
作業キューの使用が完了したら、 MFUnlockWorkQueue を呼び出します。
マルチスレッド キューはスレッド プールを使用します。これにより、パイプライン内のスレッドの合計数を減らすことができます。 ただし、作業項目はシリアル化されません。 シリアル作業キューを使用すると、アプリケーションは、独自の作業項目の手動シリアル化を実行することなく、スレッド プールの利点を得ることができます。
応答モード
シリアライザー キューは、"応答" モードでも機能します。 呼び出し元の IMFAsyncCallback::GetParameters メソッドが MFASYNC_REPLY_CALLBACK フラグを返した場合、シリアライザー キューは自動的に次の作業項目に進むことはありません。 代わりに、キューは呼び出し元からの応答を待機します。 呼び出し元は、作業キューが Invoke メソッドに渡す非同期結果オブジェクトを呼び出すことによって、応答を 通知 します。 次のコードは、呼び出し元が作業キューを通知する方法を示しています。HRESULT CCallback::Invoke(IMFAsyncResult *pResult)
{
DoSomeWork();
// Reply to the work queue that you are done.
MFInvokeCallback(pResult);
// Note: This call to MFInvokeCallback does not have to occur inside the
// Invoke method. You could call MFInvokeCallback at a later time.
return S_OK;
}
HRESULT CCallback::GetParameters(DWORD *pdwFlags, DWORD *pdwQueue)
{
*pdwFlags = MFASYNC_REPLY_CALLBACK;
*pdwQueue = m_QueueId;
return S_OK;
}
要件
サポートされている最小のクライアント | Windows 8 [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2012 [デスクトップ アプリ |UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | mfapi.h |
[DLL] | Mfplat.dll |