这是我的第一个boost::asio
项目,我正在构建一个异步服务器。
我需要使用shared_ptr
来控制对session
控件指针的访问。以下是我定义会话并将其传递给boost异步函数的方法:
// Define the new session object
std::shared_ptr<SocketSession> session = std::make_shared<SocketSession>(ioService);
// Configure the acceptor
acceptor.async_accept(session->getSessionSocket(),
boost::bind(&SocketServer::HandleAccept,
this,
session,
boost::asio::placeholders::error));
处理程序签名:
void SocketServer::HandleAccept(std::shared_ptr<SocketSession> session,
const boost::system::error_code& errorCode)
代码编译正常,而不是错误。但是在运行代码时,HandleAccept
方法被调用时出现错误:Operation canceled
,甚至没有收听套接字。
认为这与我使用shrared_ptr
的方式有关。我已经完成了一些示例并提升了shared_from_this
的使用率。我无法找出为什么这是必要的,以及为什么我的shared_ptr
在运行时失败。
帮助表示赞赏。
注意:此代码在服务器类(Server
)上运行,而不是在会话类(SocketSession
)上运行。在我看来,这导致不使用shared_from_this
因为SocketSession
正在另一个对象上创建....
答案 0 :(得分:2)
@Mendez当人们遇到这种“ASIO模式”的要求时,我有几个介绍性的样本。
你可以看看它们,因为我确实解释了这种模式及其引入的原因: