Здравствуйте.
Исходная ситуация:
Создается 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.