Share via


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

另請參閱

媒體基礎函式

工作佇列和執行緒改善