次の方法で共有


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

新しいシリアル作業キューの識別子を受け取ります。 この識別子は、作業項目をキューに入れたときに使用します。

戻り値

この関数は、これらの値のいずれかを返すことができます。

リターン コード 説明
S_OK
関数が正常に実行されました。
E_FAIL
アプリケーションが作業キューの最大数を超えました。
MF_E_SHUTDOWN
アプリケーションが 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

関連項目

メディア ファンデーション機能

作業キューとスレッド処理の機能強化