Код: Выделить всё
std::atomic is_running;
void start()
{
is_running.store(true);
std::thread { thread_function }.detach();
}
void stop()
{
is_running.store(false);
}
void thread_function()
{
using namespace std::literals;
while (is_running.load())
{
// do some task...
std::this_thread::sleep_for(5min);
}
}
Правильно ли я понимаю? Как избежать сохранения в живых (но спящих) потока, который должен был быть завершен? На данный момент мой лучший подход заключается в следующем:
Код: Выделить всё
void thread_function()
{
using namespace std::literals;
while (is_running.load())
{
// do some task...
for (unsigned int b = 0u, e = 1500u; is_running.load() && (b != e); ++b)
{
// 1500 * 200 = 300000ms = 5min
std::this_thread::sleep_for(200ms);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/297 ... ep-threads