2010-08-05 3 views
3

Таким образом, код, который я начал с и который работает (с важными оговорками ниже)Попытки заменить мое подталкивание :: ASIO :: чтение с усилением :: ASIO :: async_read

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 не всегда получать называется. Помогите!?

ТИА

+0

Не могли бы вы выслать больше кода? Это поможет узнать, как вы используете io_service и как обрабатываете дополнительный поток. – nabulke

+0

Спасибо nabulke, это было неправильное использование io_service. – shaz

ответ

8

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

+0

Да, у меня есть io_service в основной теме. Я использую его для создания shared_ptr для boost :: asio :: ip :: tcp :: socket, который я передаю в поток, который читает с него. – shaz

+1

@shaz, но вызываете ли вы функции 'run'or' run_one'? Это те, которые выполняют всю работу. – Gianni

+0

Спасибо, Джанни, вот и все! – shaz

Смежные вопросы