我正在与远程服务器建立长期连接。服务器长时间向我发送此连接中的更新。因此,我不会在我的请求中使用cpp-netlib docs中建议的Connection: close
标头。我使用流体处理程序来处理服务器数据:http://cpp-netlib.org/0.12.0/reference/http_client.html#streaming-body-handler。
http连接生存期线程在http客户端对象析构函数中执行join
调用:
当客户端对象被销毁时,它会等待所有挂起的对象 异步操作完成。
当我的流体处理程序访问已经被破坏的数据时,我遇到了这种行为的问题。
我有一个解决方法,当它对我来说是安全的时,显式调用http客户端析构函数来执行thread.join
:
class MyClient {
std::shared_ptr<http::client> client_;
std::string this_member_would_be_destroyed_before_the__client_;
};
int main() {
MyClient client;
client.join();
}
void MyClient::join() {
client_.reset(new http::client);
}
这样做我避免了MyClient对象析构函数调用,并且所有成员都保持活动状态。
问题:这是完成该任务的正确方法,还是有更好的解决方案?