Здравствуйте!
Столкнулся со следующей проблемой: не работают новые асинхронные клиенты, созданные после io_service::run.
Для примера я взял асинхронный http клиент прямо с буста (
boost async HTTP client) и немного поменял, чтобы продемонстрировать проблему.
Мой код лежит
здесь
Изменения только в самом конце. В отличие от оригинала, я создаю thread, в котором в вечном цикле запускается io_service::run. Один клиент создается до первого запуска run и работает. Второй после — и он не работает.
Все это я выполняю на ubuntu, boost 1.45.
Спасибо за помощь.
Здравствуйте, Аноним, Вы писали:
>> я создаю thread, в котором в вечном цикле запускается io_service::run.
А>Цикл не вечный. Он заканчиваеися когда заканчиваются все асинхронные калбэки.
Да, но в моем коде он вызывается так:
void worker()
{
for(;;)
{
try
{
io_service.run();
}
catch (...)
{
break;
}
}
}
Здравствуйте, derlih, Вы писали:
D>Здравствуйте, Аноним, Вы писали:
>>> я создаю thread, в котором в вечном цикле запускается io_service::run.
А>>Цикл не вечный. Он заканчиваеися когда заканчиваются все асинхронные калбэки.
D>Да, но в моем коде он вызывается так:
D>D>void worker()
D>{
D> for(;;)
D> {
D> try
D> {
D> io_service.run();
D> }
D> catch (...)
D> {
D> break;
D> }
D> }
D>}
D>
точно-точно исключений нет?
Здравствуйте, savitar, Вы писали:
S>Здравствуйте, derlih, Вы писали:
S>в твоем случае io_service.run() нужно предварять io_service.reset(), а вообще это как-то неправильно вызывать в цикле io_service.run(), если есть что деалать оно там и так будет висеть, если нет для этого есть io_service::work
Спасибо! Это помогло
По поводу work'а не понятно, в каком потоке оно будет жить. В доке не нашел, к сожалению...