Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 |
|---|---|
|
Die Funktion war erfolgreich. |
|
Die Anwendung hat die maximale Anzahl von Arbeitswarteschlangen überschritten. |
|
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 |