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 |