std::stop_source::request_stop
| bool request_stop() noexcept; |
(seit C++20) | |
Löst eine Stoppanforderung an den Stop-State aus, falls das stop_source-Objekt einen Stop-State hat und für diesen noch keine Stoppanforderung gestellt wurde.
Die Bestimmung erfolgt atomar. Wenn ein Stopp angefordert wurde, wird der Stop-State atomar aktualisiert, um Race Conditions zu vermeiden, so dass
- stop_requested() und stop_possible() gleichzeitig auf anderen
stop_tokens undstop_sources desselben Stop-States aufgerufen werden können; - request_stop() gleichzeitig auf anderen
stop_source-Objekten aufgerufen werden kann, und nur eines tatsächlich die Stoppanforderung durchführt.
Siehe jedoch den Abschnitt Anmerkungen.
Inhalt |
[edit] Parameter
(keine)
[edit] Rückgabewert
true, wenn das stop_source-Objekt einen Stop-State hat und dieser Aufruf eine Stoppanforderung gestellt hat, andernfalls false.
[edit] Nachbedingungen
stop_possible() ist false oder stop_requested() ist true.
[edit] Anmerkungen
Wenn request_stop() eine Stoppanforderung auslöst (d.h. true zurückgibt), dann werden alle für denselben zugehörigen Stop-State registrierten stop_callbacks synchron auf demselben Thread aufgerufen, auf dem request_stop() aufgerufen wird. Wenn ein Aufruf eines Callbacks durch eine Ausnahme beendet wird, wird std::terminate aufgerufen.
Wenn das stop_source-Objekt einen Stop-State hat, aber bereits eine Stoppanforderung gestellt wurde, gibt diese Funktion false zurück. Es gibt jedoch keine Garantie, dass ein anderes stop_source-Objekt, das gerade erfolgreich einen Stopp angefordert hat, nicht immer noch dabei ist, eine stop_callback-Funktion aufzurufen.
Wenn request_stop() eine Stoppanforderung auslöst (d.h. true zurückgibt), werden alle Bedingungsvariablen vom Basistyp std::condition_variable_any, die mit einem unterbrechbaren Wait für stop_tokens registriert wurden, die mit dem Stop-State des stop_sources assoziiert sind, benachrichtigt.
[edit] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |