CloseThreadpoolCleanupGroupMembers-Funktion (threadpoolapiset.h)
Gibt die Mitglieder der angegebenen Bereinigungsgruppe frei, wartet, bis alle Rückruffunktionen abgeschlossen sind, und bricht optional alle ausstehenden Rückruffunktionen ab.
Syntax
void CloseThreadpoolCleanupGroupMembers(
[in, out] PTP_CLEANUP_GROUP ptpcg,
[in] BOOL fCancelPendingCallbacks,
[in, out, optional] PVOID pvCleanupContext
);
Parameter
[in, out] ptpcg
Ein Zeiger auf eine TP_CLEANUP_GROUP Struktur, die die Bereinigungsgruppe definiert. Die Funktion CreateThreadpoolCleanupGroup gibt diesen Zeiger zurück.
[in] fCancelPendingCallbacks
Wenn dieser Parameter TRUE ist, bricht die Funktion ausstehende Rückrufe ab, die noch nicht gestartet wurden. Wenn dieser Parameter FALSE ist, wartet die Funktion, bis ausstehende Rückruffunktionen abgeschlossen sind.
[in, out, optional] pvCleanupContext
Die anwendungsdefinierte Daten, die an die Rückruffunktion der Bereinigungsgruppe der Anwendung übergeben werden sollen. Sie können die Rückruffunktion angeben, wenn Sie SetThreadpoolCallbackCleanupGroup aufrufen.
Rückgabewert
Keine
Bemerkungen
Die Funktion CloseThreadpoolCleanupGroupMembers vereinfacht die Bereinigung von Threadpool-Rückrufobjekten, indem alle Arbeitsobjekte, Warteobjekte und Timerobjekte, die Mitglieder der Bereinigungsgruppe sind, in einem einzigen Vorgang freigegeben werden. Ein Objekt wird Mitglied einer Bereinigungsgruppe, wenn das Objekt mit der Threadpool-Rückrufumgebung erstellt wird, die beim Erstellen der Bereinigungsgruppe angegeben wurde. Weitere Informationen finden Sie unter CreateThreadpoolCleanupGroup.
Die Funktion CloseThreadpoolCleanupGroupMembers blockiert, bis alle aktuell ausgeführten Rückruffunktionen abgeschlossen sind. Wenn fCancelPendingCallbacks true ist, werden ausstehende Rückrufe abgebrochen. Andernfalls blockiert die Funktion, bis alle ausstehenden Rückrufe ebenfalls abgeschlossen sind. Nachdem die Funktion CloseThreadpoolCleanupGroupMembers zurückgegeben wurde, sollte eine Anwendung kein Objekt verwenden, das zum Zeitpunkt des Aufrufs von CloseThreadpoolCleanupGroupMembers Mitglied der Bereinigungsgruppe war. Außerdem sollte eine Anwendung keines der Objekte einzeln freigeben, indem eine Funktion wie CloseThreadpoolWork aufgerufen wird, da die Objekte bereits freigegeben wurden.
Die Funktion CloseThreadpoolCleanupGroupMembers schließt die Bereinigungsgruppe selbst nicht. Stattdessen wird die Bereinigungsgruppe beibehalten, bis die Funktion CloseThreadpoolCleanupGroup aufgerufen wird. Außerdem wirkt sich das Schließen einer Bereinigungsgruppe nicht auf die zugeordnete Threadpool-Rückrufumgebung aus. Die Rückrufumgebung bleibt erhalten, bis sie durch Aufrufen von DestroyThreadpoolEnvironment zerstört wird.
Solange eine Bereinigungsgruppe beibehalten wird, werden der Bereinigungsgruppe neue Objekte hinzugefügt, die mit der zugeordneten Threadpool-Rückrufumgebung der Bereinigungsgruppe erstellt wurden. Dadurch kann eine Anwendung die Bereinigungsgruppe wiederverwenden. Es kann jedoch zu Fehlern führen, wenn die Anwendung keinen Code synchronisiert, der CloseThreadpoolCleanupGroupMembers mit Code zum Erstellen neuer Objekte aufruft. Angenommen, ein Thread erstellt zwei Threadpoolarbeitsobjekte, Work1 und Work2. Ein anderer Thread ruft CloseThreadpoolCleanupGroupMembers auf. Je nachdem, wann die Threads ausgeführt werden, kann eine der folgenden Aktionen auftreten:
- Work1 und Work2 werden der Bereinigungsgruppe hinzugefügt, nachdem die vorhandenen Mitglieder freigegeben wurden. Code, der Work1 und Work2 übermittelt, ist erfolgreich.
- Work1 wird der Bereinigungsgruppe hinzugefügt, bevor die vorhandenen Mitglieder freigegeben werden, sodass Work1 zusammen mit anderen Mitgliedern freigegeben wird. Anschließend wird Work2 hinzugefügt. Code, der Work1 übermittelt, generiert eine Ausnahme. Code, der Work2 übermittelt, ist erfolgreich.
- Work1 und Work2 werden der Bereinigungsgruppe hinzugefügt, bevor die vorhandenen Mitglieder freigegeben werden, wodurch sowohl Work1 als auch Work2 freigegeben werden. Code, der Work1 oder Work2 übermittelt, generiert eine Ausnahme.
Um eine Anwendung zu kompilieren, die diese Funktion verwendet, definieren Sie _WIN32_WINNT als 0x0600 oder höher.
Beispiele
Ein Beispiel finden Sie unter Verwenden der Threadpoolfunktionen.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows Vista [Desktop-Apps | UWP-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2008 [Desktop-Apps | UWP-Apps] |
Zielplattform | Windows |
Kopfzeile | threadpoolapiset.h (einschließlich Windows.h) |
Bibliothek | Kernel32.lib |
DLL | Kernel32.dll |