MFAllocateSerialWorkQueue-Funktion (mfapi.h)

Erstellt eine Arbeitswarteschlange, die garantiert Arbeitselemente serialisiert. Die serielle Arbeitswarteschlange umschließt eine vorhandene Multithreadarbeitswarteschlange. Die serielle Arbeitswarteschlange erzwingt eine FIFO-Ausführungsreihenfolge (First-In, First-Out).

Syntax

HRESULT MFAllocateSerialWorkQueue(
  [in]  DWORD dwWorkQueue,
  [out] DWORD *pdwWorkQueue
);

Parameter

[in] dwWorkQueue

Der Bezeichner einer vorhandenen Arbeitswarteschlange. Dies muss entweder eine Multithreadwarteschlange oder eine andere serielle Arbeitswarteschlange sein. Eine der folgenden Optionen kann verwendet werden:

  • Die Standardarbeitswarteschlange (MFASYNC_CALLBACK_QUEUE_STANDARD)
  • Plattform-Multithreadwarteschlange (MFASYNC_CALLBACK_QUEUE_MULTITHREADED)
  • Eine Multithreadwarteschlange, die von der MFLockSharedWorkQueue-Funktion zurückgegeben wird.
  • Eine serielle Warteschlange, die von der MFAllocateSerialWorkQueue-Funktion erstellt wird.

[out] pdwWorkQueue

Empfängt einen Bezeichner für die neue serielle Arbeitswarteschlange. Verwenden Sie diesen Bezeichner beim Anstehen von Arbeitselementen.

Rückgabewert

Diese Funktion kann einen dieser Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
Die Funktion wurde erfolgreich ausgeführt.
E_FAIL
Die Anwendung hat die maximale Anzahl von Arbeitswarteschlangen überschritten.
MF_E_SHUTDOWN
Die Anwendung hat MFStartup nicht aufgerufen, oder die Anwendung hat bereits MFShutdown aufgerufen.

Hinweise

Wenn Sie mit der Arbeitswarteschlange fertig sind, rufen Sie MFUnlockWorkQueue auf.

Multithread-Warteschlangen verwenden einen Threadpool, der die Gesamtzahl der Threads in der Pipeline reduzieren kann. Arbeitselemente werden jedoch nicht serialisiert. Eine serielle Arbeitswarteschlange ermöglicht es der Anwendung, die Vorteile des Threadpools zu nutzen, ohne dass die eigenen Arbeitselemente manuell serialisiert werden müssen.

Antwortmodus

Eine Serialisierungswarteschlange kann auch im Antwortmodus funktionieren. Wenn die IMFAsyncCallback::GetParameters-Methode des Aufrufers das MFASYNC_REPLY_CALLBACK-Flag zurückgibt, wird die Serialisierungswarteschlange nicht automatisch zum nächsten Arbeitselement übergehen. Stattdessen wartet die Warteschlange auf eine Antwort vom Aufrufer. Der Aufrufer signalisiert die Antwort, indem er das asynchrone Ergebnisobjekt aufruft, das die Arbeitswarteschlange an die Invoke-Methode übergibt. Der folgende Code veranschaulicht, wie der Aufrufer die Arbeitswarteschlange signalisiert.
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;
}

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 8 [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2012 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile mfapi.h
DLL Mfplat.dll

Weitere Informationen

Media Foundation-Funktionen

Verbesserungen bei Arbeitswarteschlange und Threading