Метод request_stop
Метод request_stop класса jthread
запрашивает остановку выполнения потока.
Он устанавливает флаг остановки, связанный
с объектом stop_token, который был
передан в вызываемую функцию. Поток может
проверить этот флаг и корректно завершить
свою работу. Метод не принимает параметров
и возвращает true, если запрос на
остановку был успешно выполнен, и
false, если остановка уже была
запрошена ранее или поток не поддерживает
остановку.
Синтаксис
jthread.request_stop()
Пример
Давайте создадим поток, который будет
выводить числа до тех пор, пока не получит
запрос на остановку. В основном потоке
запросим остановку через 3 секунды:
#include <iostream>
#include <thread>
#include <chrono>
using namespace std;
int main()
{
jthread thr([](stop_token stoken) {
int i = 0;
while (!stoken.stop_requested()) {
cout << i << endl;
i++;
this_thread::sleep_for(chrono::milliseconds(500));
}
cout << "Stopped" << endl;
});
this_thread::sleep_for(chrono::seconds(3));
thr.request_stop();
return 0;
}
Результат выполнения кода:
0
1
2
3
4
5
"Stopped"
Пример
Давайте проверим возвращаемое значение
метода request_stop. Первый вызов
вернёт true, а повторный -
false:
#include <iostream>
#include <thread>
using namespace std;
int main()
{
jthread thr([](stop_token stoken) {
while (!stoken.stop_requested()) {
this_thread::sleep_for(chrono::milliseconds(100));
}
});
bool first = thr.request_stop();
bool second = thr.request_stop();
cout << boolalpha;
cout << first << endl;
cout << second << endl;
return 0;
}
Результат выполнения кода:
true
false