boost asio синхронизировать опубликованную задачу - PullRequest
0 голосов

Давайте рассмотрим следующую ситуацию.У меня есть некоторая мастер-функция, которая вызывает цепочку асинхронных операций - функция chain ().В этой цепочке я не хочу получать 10 пакетов, вызывая асинхронную обработку пакетов и снова ставя эту очередь в очередь.

void master
{
    chain(10);
    wait_for_chain_completion();
    // Do some other work only after complition of last processor
}

void chain(int n)
{
    if (n > 0)
    {
        socket_.async_receive(buffer, [this,n](const boost::system::error_code& error)
        {
            chain (--n);
            boost::asio::post(io_, packet_processor);
        });
    }
}

После этого я не хочу возвращать контекст выполнения к главной функции.Я думаю, что такую ​​задачу можно выполнить с помощью семафоров, но я не уверен, что такое решение подходит в моей ситуации.

...