У меня небольшая проблема с библиотекой boost :: asio. Мое приложение получает и обрабатывает данные асинхронно, оно создает потоки и запускает io_service.run () для каждого из них.
boost::asio::io_service io;
boost::thread_group thread_pool;
...
int cpu_cnt = get_cpu_count();
for (int i = 0; i < cpu_cnt; ++i)
{
thread_pool.create_thread( boost::bind(&run_service, &io) );
}
void run_service(boost::asio::io_service* io)
{
try
{
io->run();//make fun
}
catch(const std::exception& e)
{ //process error
}
catch(...)
{ //process error
}
}
Время от времени мое приложение получает сообщение (через систему обмена сообщениями Windows) от какого-либо приложения супервизора, которое проверяет, является ли моя программа активной или нет. Если мое приложение не ответит, оно будет перезапущено. Сложность здесь заключается в проверке того, что потоки запущены и не заблокированы. Я могу опубликовать обработчик на io_service так:
io.post( &reply_to_supervisor );
но этот метод влияет только на один поток.
Как я могу проверить, что все потоки работают и не заблокированы?