std::stop_token
| Definiert in Header <stop_token> |
||
| class stop_token; |
(seit C++20) | |
Die Klasse stop_token bietet die Mittel zur Überprüfung, ob eine Stopp-Anforderung für das zugehörige std::stop_source-Objekt gestellt wurde oder gestellt werden kann. Sie ist im Wesentlichen eine threadsichere "Ansicht" des zugehörigen Stop-Zustands.
Das stop_token kann auch an den Konstruktor von std::stop_callback übergeben werden, sodass der Callback aufgerufen wird, wenn für das stop_token das zugehörige std::stop_source zum Stoppen angefordert wird. Und stop_token kann an die unterbrechbaren Wartefunktionen von std::condition_variable_any übergeben werden, um das Warten der Bedingungsvariable zu unterbrechen, wenn ein Stopp angefordert wird.
Inhalt |
[bearbeiten] Alias-Templates für Member
| Typ | Definition |
| callback_type<Callback> (seit C++26) | std::stop_callback<Callback> |
[bearbeiten] Memberfunktionen
erstellt ein neues stop_token-Objekt(public member function) | |
zerstört das stop_token-Objekt(public member function) | |
weist dem stop_token-Objekt einen Wert zu(public member function) | |
Modifizierer | |
tauscht zwei stop_token-Objekte(public member function) | |
Observer | |
| überprüft, ob der zugehörige Stop-Zustand zum Stoppen angefordert wurde (public member function) | |
| überprüft, ob der zugehörige Stop-Zustand zum Stoppen angefordert werden kann (public member function) | |
[bearbeiten] Nicht-Member-Funktionen
| (C++20) |
vergleicht zwei std::stop_token-Objekte(function) |
| (C++20) |
spezialisiert den Algorithmus std::swap (function) |
[bearbeiten] Hinweise
Ein stop_token-Objekt wird im Allgemeinen nicht unabhängig erstellt, sondern von einem std::jthread oder std::stop_source abgerufen. Dadurch teilt es denselben zugehörigen Stop-Zustand wie das std::jthread oder std::stop_source.
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_jthread |
201911L |
(C++20) | Stop-Token und joining thread |
[bearbeiten] Beispiel
#include <iostream> #include <thread> using namespace std::literals::chrono_literals; void f(std::stop_token stop_token, int value) { while (!stop_token.stop_requested()) { std::cout << value++ << ' ' << std::flush; std::this_thread::sleep_for(200ms); } std::cout << std::endl; } int main() { std::jthread thread(f, 5); // prints 5 6 7 8... for approximately 3 seconds std::this_thread::sleep_for(3s); // The destructor of jthread calls request_stop() and join(). }
Mögliche Ausgabe
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19