class foo {
public:
int bar;
void _quux(boost::system::error_code ec)
{
std::cout << "quux:" << ++bar << std::endl;
}
boost::system::error_code connect(const boost::asio::ip::tcp::endpoint& endpoint)
{
std::cout << "bar:" << bar << std::endl;
if(!bar) {
_socket.async_connect(endpoint,
boost::bind(&foo::_quux, this,
boost::asio::placeholders::error));
return boost::asio::error::would_block;
}
}
tcp::socket _socket;
}
为什么bar
在connect()
内保持0,即使它在_quux
中变为1(它始终为0-> 1,因此状态丢失)?
答案 0 :(得分:1)
我没有看到问题(除了奇怪的使用硬编码的error_code之外)
在这里观看:
#include <boost/asio.hpp>
using tcp = boost::asio::ip::tcp;
#include <iostream>
#include <boost/bind.hpp>
class foo {
public:
int bar;
void _quux(boost::system::error_code ec)
{
std::cout << "quux:" << ++bar << std::endl;
}
boost::system::error_code connect(const boost::asio::ip::tcp::endpoint& endpoint)
{
std::cout << "bar:" << bar << std::endl;
if(!bar) {
_socket.async_connect(endpoint, boost::bind(&foo::_quux, this, boost::asio::placeholders::error));
return boost::asio::error::would_block;
}
return {};
}
tcp::socket _socket;
};
int main()
{
boost::asio::io_service svc;
foo f { 0, tcp::socket { svc } };
tcp::endpoint ep(boost::asio::ip::address_v4::loopback(), 6767);
f.connect(ep);
svc.run();
}
打印:
bar:0
quux:1
如果您错误地期望值会随着foo
而改变,那么这显然是错误的期望:_async
表示 asycnronous 执行。从本质上讲,该值将在更新后更新 ,而不是更早。