次の方法で共有


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

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

戻り値

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

リターン コード Description
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;
}

Requirements

Requirement 価値
サポートされる最小クライアント Windows 8 [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2012 [デスクトップ アプリ |UWP アプリ]
ターゲット プラットフォーム ウィンドウズ
Header mfapi.h
Library Mfplat.lib
DLL Mfplat.dll

こちらも参照ください

Media Foundation 関数

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