相关疑难解决方法(0)

提升async_*函数和shared_ptr

我经常在代码中看到这种模式,绑定shared_from_this为成员函数的第一个参数,并使用async_*函数调度结果.以下是另一个问题的示例:

void Connection::Receive()
{
     boost::asio::async_read(socket_,boost::asio::buffer(this->read_buffer_),
        boost::bind(&Connection::handle_Receive, 
           shared_from_this(),
           boost::asio::placeholders::error,
           boost::asio::placeholders::bytes_transferred));
 }
Run Code Online (Sandbox Code Playgroud)

使用shared_from_this()而不是使用的唯一原因this是在调用成员函数之前保持对象存活.但除非在某处有某种类型的增强魔法,因为this指针是类型的Connection*,所有都handle_Receive可以,并且返回的智能指针应该立即转换为常规指针.如果发生这种情况,那么没有任何东西可以让对象保持活力.当然,在呼叫中没有指针shared_from_this.

但是,我经常看到这种模式,我不敢相信它在我看来完全被打破了.当操作完成时,是否有一些Boost魔法会导致shared_ptr转换为常规指针?如果是这样,这是在某处记录的吗?

特别是,在某个地方记录共享指针将保持存在直到操作完成?调用get_pointer强指针然后在返回的指针上调用成员函数是不够的,除非强指针在成员函数返回之前不被销毁.

c++ boost shared-ptr boost-asio

20
推荐指数
2
解决办法
8840
查看次数

Boost ASIO:向所有连接的客户端发送消息

我正在开发一个涉及boost::beastwebsocket/http混合服务器的项目,该服务器运行在上面boost::asio.我的项目advanced_server.cpp源于示例源代码.

它工作正常,但现在我正在尝试添加一项功能,该功能需要向所有连接的客户端发送消息.

我不是很熟悉boost::asio,但是现在我看不到有任何方式可以播放"广播"事件(如果这是正确的术语).

我天真的方法是看看我是否可以构造websocket_session()附加类似事件监听器的东西,并且析构函数会分离监听器.此时,我可以触发事件,并使所有当前有效的websocket会话(websocket_session()作用域的生命周期)执行回调.

/sf/answers/1192031571/,它或多或少地做了我想要的(ab)使用a boost::asio::steady_timer,但这似乎是一种可怕的黑客来完成应该非常简单的事情.

基本上,给定一个有状态boost::asio服务器,我如何在多个连接上进行操作?

c++ boost boost-asio

3
推荐指数
2
解决办法
1750
查看次数

同一程序中是否可以有两个升压受体?

我的 boost 服务器意外停止接受传入连接,因为我团队中的其他人在不同线程(使用不同端口)中使用 boost 接受器创建了另一个服务器?这是正常的吗?如何让两个服务器独立工作而不互相干扰?

已解决:接受器与此无关,这家伙在某个地方启动了无限循环,阻塞了其他组件。我想这就是当团队工作不协调时会发生的情况:( 对不起,伙计们,sehe 一如既往地是最好的

c++ boost boost-asio

2
推荐指数
1
解决办法
267
查看次数

标签 统计

boost ×3

boost-asio ×3

c++ ×3

shared-ptr ×1