Freigeben über


MFAllocateSerialWorkQueue-Funktion (mfapi.h)

Erstellt eine Arbeitswarteschlange, die garantiert arbeitsaufgaben serialisiert. Die serielle Arbeitswarteschlange umschließt eine vorhandene Multithread-Arbeitswarteschlange. Die serielle Arbeitswarteschlange erzwingt eine FiFO-Ausführungsreihenfolge (First In, First-In).

Syntax

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

Die 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)
  • Die Multithread-Warteschlange der Plattform (MFASYNC_CALLBACK_QUEUE_MULTITHREADED)
  • Eine von der MFLockSharedWorkQueue-Funktion zurückgegebene Multithread-Warteschlange.
  • Eine serielle Warteschlange, die von der Funktion MFAllocateSerialWorkQueue erstellt wird.

[out] pdwWorkQueue

Empfängt einen Bezeichner für die neue serielle Arbeitswarteschlange. Verwenden Sie diesen Bezeichner, wenn Arbeitsaufgaben in Warteschlange warteschlangen.

Rückgabewert

Diese Funktion kann einen dieser Werte zurückgeben.

Rückgabecode Description
S_OK
Die Funktion war erfolgreich.
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 genannt.

Bemerkungen

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

Multithread-Warteschlangen verwenden einen Threadpool, wodurch die Gesamtanzahl der Threads in der Pipeline reduziert werden kann. Sie serialisieren jedoch keine Arbeitsaufgaben. Eine serielle Arbeitswarteschlange ermöglicht es der Anwendung, die Vorteile des Threadpools zu nutzen, ohne die manuelle Serialisierung ihrer eigenen Arbeitsaufgaben ausführen zu müssen.

Antwortmodus

Eine Serialisierungswarteschlange kann auch im Modus "Antworten" funktionieren. Wenn die IMFAsyncCallback::GetParameters-Methode des Aufrufers das MFASYNC_REPLY_CALLBACK Flag zurückgibt, wechselt die Serialisierungswarteschlange nicht automatisch zur nächsten Arbeitsaufgabe. Stattdessen wartet die Warteschleife auf eine Antwort des Anrufers. Der Aufrufer signalisiert die Antwort, indem das asynchrone Ergebnisobjekt aufgerufen wird, 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

Anforderung Wert
Mindestens unterstützter Client Windows 8 [Desktop-Apps | UWP-Apps]
Mindestanforderungen für unterstützte Server Windows Server 2012 [Desktop-Apps | UWP-Apps]
Zielplattform Fenster
Header mfapi.h
Library Mfplat.lib
DLL Mfplat.dll

Siehe auch

Media Foundation-Funktionen

Verbesserungen bei Der Arbeitswarteschlange und Threading