Остановка boost::asio::io_service
От: Jack Applegame  
Дата: 05.10.08 19:42
Оценка:
Здравствуйте.
Исходная ситуация:
Создается io_service;
Создается объект io_service::work, чтобы io_service::run() не завершал работу в случае отсутствия событий в очереди.
Создаются несколько потоков (boost::thread), в которых выполняется io_service::run(). Назовем эти потоки исполняющими.
Затем основной поток (назовем его управляющим) при помощи io_service::post() пихает в очередь различные события.
Исполняющие потоки, как им и положено, обрабатывают эти события по мере поступления.

Задача:
В определенный момент управляющий поток должен прекратить обработку событий. Для этого я удаляю объект io_service::work и вызываю из главного потока io_service::stop().
Но почему-то это не работает. Исполняющие потоки продолжают обрабатывать события пока очередь не опустошиться, хотя в документации сказано: This function does not block, but instead simply signals the io_service to stop. All invocations of its run() or run_one() member functions should return as soon as possible.

Что я делаю не так?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.