Sobes.tech
Junior — Middle

Vai ir iespējams pabeigt standarta plūsmu, kas uzsākta iekšā tās izveidojošajā pavedienā?

sobes.tech AI

Atbilde no 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;
}

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