РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
768 of 815 menu

Класс jthread

Класс jthread (joining thread) был добавлен в C++20 и представляет собой улучшенную версию класса thread. Его главное отличие заключается в том, что при разрушении объекта jthread автоматически вызывается метод join, если поток еще не был присоединен или отсоединен. Это избавляет программиста от необходимости вручную управлять временем жизни потока и предотвращает аварийное завершение программы. Кроме того, jthread поддерживает встроенный механизм запроса остановки через std::stop_token, который позволяет корректно сигнализировать потоку о необходимости завершить работу.

Конструктор класса принимает вызываемый объект (функцию, лямбду или функтор), который будет выполнен в новом потоке. В качестве дополнительных аргументов можно передать параметры для этого вызываемого объекта. Также jthread может принимать stop_token первым аргументом, если вызываемый объект ожидает его для проверки запроса остановки.

Синтаксис

#include <thread> std::jthread name(function, args...); std::jthread name;

Пример

Давайте создадим простой поток с помощью jthread и выполним в нем вывод чисел:

#include <iostream> #include <thread> using namespace std; void printNumbers() { for (int i = 1; i <= 5; i++) { cout << i << " "; } cout << endl; } int main() { jthread th(printNumbers); // При разрушении th автоматически вызовется join return 0; }

Результат выполнения кода:

1 2 3 4 5

Пример

Давайте рассмотрим использование stop_token для корректной остановки потока. Поток будет выполняться до тех пор, пока не поступит запрос на остановку:

#include <iostream> #include <thread> using namespace std; void worker(stop_token token) { int i = 1; while (!token.stop_requested()) { cout << i << " "; i++; } cout << endl << "Stopped" << endl; } int main() { jthread th(worker); th.request_stop(); return 0; }

Результат выполнения кода:

1 "Stopped"

Смотрите также

  • класс thread,
    который представляет собой базовый класс для работы с потоками
  • метод request_stop,
    который запрашивает остановку выполнения потока
  • метод join,
    который ожидает завершения выполнения потока
  • метод detach,
    который отсоединяет поток от объекта
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить