повышение:: asio, асинхронная ошибка чтения

В эти дни существует много языков, которые позволяют Вам создавать межплатформенные приложения GUI эффективно. Java, Python, Tcl/tk, C#...

я думаю, что необходимо определить требования приложения немного больше, например:

  • UI будет Веб-, или основан на рабочем столе?
  • приложение собирается быть большим или маленьким?
  • действительно ли это покажет своего рода "дополнительную" функцию (например, плагины)?
  • это будет функционировать по сети, и это, вероятно, будет распределено/загружено сбалансированное?

список может продолжиться навсегда, разработать точки определения о Вашем приложении и начать исследовать язык на основе целого.

7
задан benRollag 9 March 2013 в 19:57
поделиться

2 ответа

Вы должны изменить этот фрагмент кода:

   void startRead()
   {
       std::cout << "Connection::startRead()" << std::endl;
       socket.async_read_some(boost::asio::buffer(readBuffer),
                              boost::bind(&Connection::handleRead,this,_1,_2));
   }

на:

void startRead()
{
     std::cout << "Connection::startRead()" << std::endl;
     socket.async_read_some(boost::asio::buffer(readBuffer),
                boost::bind(&Connection::handleRead,this->shared_from_this(),_1,_2));
}

Обратите внимание, что я передал общий указатель на привязку . Это сохранит ваш экземпляр Connection до тех пор, пока не будет вызван обработчик. В противном случае счетчик использования обнуляется в Server :: startAccept , и объект удаляется. Затем, когда вызывается обработчик, память становится недействительной, и вы испытываете ужасное «неопределенное поведение».

11
ответ дан 7 December 2019 в 01:24
поделиться

Я думаю, что ваш запуск существует, потому что у вас не осталось работы в очереди работ.

Вы должны предотвратить завершение цикла и уничтожение объекта службы.

Либо попробуйте это:

boost :: asio :: io_service :: work

или просто выполните

do { ioService.run( error ); } while( !error );
-1
ответ дан 7 December 2019 в 01:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: