Junior — Middle
Kann man den Standard-Stream, der innerhalb des erstellenden Threads gestartet wurde, beenden?
sobes.tech KI
Antwort von 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;
}
Таким образом, поток сам контролирует момент завершения, а внешний поток лишь сигнализирует об этом.