Sobes.tech
Назад к вопросам
Junior — Middle
92

Можно ли завершить работу стандартного потока, запущенного внутри создающего его потока?

Ответ от нейросети

sobes.tech AI

В стандартной библиотеке C++ нет прямого способа принудительно завершить поток извне или изнутри другого потока. Поток должен сам завершить свою работу, например, по условию или флагу.

Если поток запущен внутри создающего его потока, то для завершения работы стандартного потока обычно используют:

  • Флаги или условные переменные: поток периодически проверяет флаг завершения и корректно выходит.
  • std::thread::join(): вызывающий поток ожидает завершения дочернего.

Пример:

#include <thread>
#include <atomic>
#include <iostream>
#include <chrono>

std::atomic<bool> stopFlag(false);

void worker() {
    while (!stopFlag.load()) {
        std::this_thread::sleep_for(std::chrono::milliseconds(100));
        std::cout << "Работаю...\n";
    }
    std::cout << "Поток завершает работу.\n";
}

int main() {
    std::thread t(worker);
    std::this_thread::sleep_for(std::chrono::seconds(1));
    stopFlag.store(true); // сигнал потоку завершиться
    t.join();
    return 0;
}

Таким образом, поток сам контролирует момент завершения, а внешний поток лишь сигнализирует об этом.