У меня мало проблем с boost :: asio library. Мое приложение получает и обрабатывает данные асинхронно, создает потоки и запускает io_service.run() для каждого из них.Как обнаружить тупик с библиотекой Asio?
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);
но этот метод влияет только на один поток. Как я могу проверить, что все потоки запущены, а не заблокированы?
бы динамический тупик так же плохо, верно? – MSalters 2009-01-05 15:49:01