Boost Beast async_write() с очередьюC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Boost Beast async_write() с очередью

Сообщение Anonymous »

У меня есть следующий код:

Код: Выделить всё

std::queue< nlohmann::json > outgoingMessages;

void session::do_write( void ) {
if ( outgoingMessages.size() > 0 ) {
auto message = outgoingMessages.front();
outgoingMessages.pop();

ws_.async_write( boost::asio::buffer( message.dump() ), boost::beast::bind_front_handler( & session::on_write, shared_from_this() ) );
}
};

void session::on_write( boost::beast::error_code errorCode, std::size_t bytes_transferred ) {
if ( errorCode )
return fail( errorCode, "write" );

if ( bytes_transferred == 0 )
std::this_thread::sleep_for( std::chrono::milliseconds( 1 ) );

do_write();
};
Мне нужно, чтобы он писал только тогда, когда есть данные для записи. Проблема в том, что когда очередь пуста, async_write() никогда не вызывается, что нарушает цикл. Прекрасно работает до тех пор, пока не закончатся элементы очереди для отправки.

Подробнее здесь: https://stackoverflow.com/questions/690 ... with-queue
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»