Как правильно завершать дочерний поток, который ждет выполнения операции?

Псевдокод, дочернего потока, который ждет данных и передает сообщения основному потоку по получению этих данных, как его корректно завершить, если основной поток получил сообщение о завершении? Чувствую нехватку знаний, может что почитать? Вообще использую boost::asio и хочу кроссплатформенности.
while(true)
    {
        some_monitor.async_monotor(callback_handler);
        io_service.run();
        io_service.reset();
    }


Если я правильно понимаю, то io_service.run() — тут я жду пока система известит мой поток и у меня нет других способов завершить это, кроме как самому себе(дочернему потоку) послать данные, которые будут означать завершение?
void callback_handler(data d)
    {
        if (d == STOP)
        {
            running = false;
        }
    }
...
    while(running)
    {
        some_monitor.async_monotor(callback_handler);
        io_service.run();
        io_service.reset();
    }


Заранее длагодарю.
  • Вопрос задан
  • 3578 просмотров
Решения вопроса 1
@SadGnome
Точно не помню, но попробуйте вызвать io_service.stop() из другого потока для прерывания выполнения run().
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы