【发布时间】:2015-11-17 18:38:27
【问题描述】:
我是 boost::asio 的新手,但我遇到了问题。我正在编写将一些命令循环发送到服务器的客户端。我正在使用 boost::asio::async_write 发送命令,我希望每次发送命令时都会调用处理程序。事实上,只有在第一次发送期间,我才看到调用了该处理程序。我的客户是这样的:
Client::Client(boost::asio::io_service & p_ioService,
boost::asio::ip::tcp::endpoint p_endpoint)
: io_service(p_ioService), endpoint(p_endpoint), socket(p_ioService)
{
socket.connect(endpoint);
}
Client::~Client()
{
socket.close();
}
void Client::sendCommand(const string & p_command)
{
boost::asio::async_write(socket,boost::asio::buffer(p_command),
boost::bind(&Client::onSendingFinished,this, _1, _2));
io_service.run();
}
void Client::onSendingFinished(const boost::system::error_code& ec, std::size_t bytes_transferred)
{
cout<<"Sent "<<bytes_transferred<<endl;
}
在 main.cpp 中没有其他地方调用 io_service.run。我注意到如果我打电话 io_service.run() 之后的 io_service.reset() 工作正常,每次都会调用处理程序。
如果没有 io_service.reset() 我应该如何解决这个问题
提前致谢
【问题讨论】:
标签: c++ boost-asio