Попытка заменить мой boost :: asio :: read на boost :: asio :: async_read - PullRequest
3 голосов
/ 05 августа 2010

Итак, код, с которого я начал и который работает (с важными предостережениями ниже)

int reply_length = boost::asio::read(*m_socketptr, boost::asio::buffer((char*)reply, 6));

Это работает, я получаю заголовок, который затем декодирую и выполняю еще одно чтение, которое возвращает мне мое сообщениеи затем я возвращаюсь к началу и читаю другой заголовок.Это привязывает мой процессор к 100%, поэтому я хочу заменить заголовок, показанный выше, на что-то вроде следующего:

m_socketptr->async_read_some(boost::asio::buffer(m_data, 6), boost::bind(&CSListener::handleRead, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));

или

boost::asio::async_read(*m_socketptr, boost::asio::buffer(m_data, 6), boost::bind(&CSListener::handleRead, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));

В любом случае, я пишу код, метод handleReadникогда не звонят.Помогите!?

TIA

1 Ответ

8 голосов
/ 05 августа 2010

Я предполагаю, что вы создали io_service где-то в вашем коде? Вам нужно позвонить на io_service.run() или io_service.run_one(), чтобы он заработал. Если вам нужно, чтобы он был асинхронным, тогда run_one() это вы человек; поместите вызов в основной цикл вашего приложения / потока.

...