у меня небольшие проблемы с библиотекой 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 );
но этот метод влияет только на один поток. Как я могу проверить, что все потоки работают и не заблокированы?