В эти дни существует много языков, которые позволяют Вам создавать межплатформенные приложения GUI эффективно. Java, Python, Tcl/tk, C#...
я думаю, что необходимо определить требования приложения немного больше, например:
список может продолжиться навсегда, разработать точки определения о Вашем приложении и начать исследовать язык на основе целого.
Вы должны изменить этот фрагмент кода:
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
, и объект удаляется. Затем, когда вызывается обработчик, память становится недействительной, и вы испытываете ужасное «неопределенное поведение».
Я думаю, что ваш запуск существует, потому что у вас не осталось работы в очереди работ.
Вы должны предотвратить завершение цикла и уничтожение объекта службы.
Либо попробуйте это:
boost :: asio :: io_service :: work
или просто выполните
do { ioService.run( error ); } while( !error );