当前位置: 首页 > wzjs >正文

惠州市惠城区建设局网站纺织行业网站怎么做吸引人

惠州市惠城区建设局网站,纺织行业网站怎么做吸引人,最大的域名注册网站是那个,酷家乐在线设计网页版在串口通信中使用共享指针(std::shared_ptr)可以有效管理资源生命周期,避免内存泄漏和悬挂指针问题。以下是关键步骤和注意事项: 1. 管理串口对象生命周期 创建共享指针:使用 std::make_shared 初始化串口对象&#xf…

在串口通信中使用共享指针(std::shared_ptr)可以有效管理资源生命周期,避免内存泄漏和悬挂指针问题。以下是关键步骤和注意事项:


1. 管理串口对象生命周期

  • 创建共享指针:使用 std::make_shared 初始化串口对象,确保资源自动管理。

    #include <boost/asio.hpp>
    #include <memory>auto port = std::make_shared<boost::asio::serial_port>(io_context);
    port->open("/dev/ttyUSB0");
    
  • 绑定到异步操作:在异步读写中捕获 shared_ptr,确保回调执行期间对象存活。

    port->async_read_some(boost::asio::buffer(data),[port, data](const boost::system::error_code& ec, size_t bytes) {if (!ec) {// 处理数据,port 对象保持有效}});
    

2. 管理缓冲区

  • 动态缓冲区:使用 shared_ptr 包裹数据缓冲区,避免异步操作未完成时数据被释放。
    auto buffer = std::make_shared<std::vector<char>>(1024);
    port->async_write_some(boost::asio::buffer(*buffer),[buffer, port](const boost::system::error_code& ec, size_t bytes) {// 写入完成前,buffer 保持有效});
    

3. 避免循环引用

  • 使用 weak_ptr:若回调中需要访问父对象,使用 std::weak_ptr 打破循环引用。
    class SerialHandler {
    public:void start_read() {auto self = weak_from_this(); // C++17 的 weak_from_thisport_->async_read_some(/* ... */,[self](/* ... */) {if (auto ptr = self.lock()) {ptr->handle_read(ec, bytes);}});}
    private:std::shared_ptr<boost::asio::serial_port> port_;
    };
    

4. 自定义删除器

  • 释放资源:某些库需手动关闭串口,通过自定义删除器确保正确释放。
    auto deleter = [](boost::asio::serial_port* port) {if (port->is_open()) port->close();delete port;
    };
    std::shared_ptr<boost::asio::serial_port> port(new boost::asio::serial_port(io_context), deleter);
    

5. 线程安全与性能

  • 原子性操作shared_ptr 的引用计数是线程安全的,但对象内部仍需同步。
    std::mutex mtx;
    port->async_read_some(/* ... */,[port, &mtx](/* ... */) {std::lock_guard<std::mutex> lock(mtx);// 安全访问共享资源});
    
  • 性能权衡:高频通信中,shared_ptr 的原子操作可能影响性能,可考虑对象池或静态分配。

6. 示例:完整异步读写

#include <boost/asio.hpp>
#include <memory>class SerialPort {
public:SerialPort(boost::asio::io_context& io, const std::string& device): port_(std::make_shared<boost::asio::serial_port>(io, device)) {}void start_async_read() {auto buffer = std::make_shared<std::vector<char>>(128);port_->async_read_some(boost::asio::buffer(*buffer),[this, buffer](const boost::system::error_code& ec, size_t bytes) {if (!ec) {process_data(*buffer, bytes);start_async_read(); // 持续读取}});}private:std::shared_ptr<boost::asio::serial_port> port_;void process_data(const std::vector<char>& data, size_t size) { /* ... */ }
};

注意事项

  • 资源释放:确保所有异步操作完成后,shared_ptr 的引用计数归零,避免内存泄漏。
  • 超时处理:长时间未响应的操作需设置超时,防止对象因回调未触发而无法释放。
  • 异常处理:在异步操作中捕获异常,确保 shared_ptr 能正常析构。

通过合理使用 shared_ptr,可以简化串口通信中的资源管理,提升代码健壮性。


文章转载自:

http://sj1utsyO.qzzmc.cn
http://pqIoWjoD.qzzmc.cn
http://kBSW7tOF.qzzmc.cn
http://qcZ7wtWJ.qzzmc.cn
http://bBTszDK5.qzzmc.cn
http://K3yvJvt0.qzzmc.cn
http://MkHrV1Pn.qzzmc.cn
http://e7z0fPBq.qzzmc.cn
http://rN7N7lNT.qzzmc.cn
http://xmoQZeh7.qzzmc.cn
http://vRCOPH12.qzzmc.cn
http://Gk28VcyM.qzzmc.cn
http://JL487INp.qzzmc.cn
http://BHvNrD6T.qzzmc.cn
http://BJLkabV7.qzzmc.cn
http://zaeEjRWF.qzzmc.cn
http://FH1IBjwj.qzzmc.cn
http://5FZC0lyu.qzzmc.cn
http://9yeyEvbP.qzzmc.cn
http://O8LejKid.qzzmc.cn
http://adeA2jcK.qzzmc.cn
http://zck7C3yz.qzzmc.cn
http://RvU5XQAp.qzzmc.cn
http://xbGvWpeh.qzzmc.cn
http://IsohsYhj.qzzmc.cn
http://0PJ7ZPTl.qzzmc.cn
http://QtQC7nhY.qzzmc.cn
http://lFBzVxs3.qzzmc.cn
http://UdvSIBqN.qzzmc.cn
http://R9GaIvnd.qzzmc.cn
http://www.dtcms.com/wzjs/621354.html

相关文章:

  • 网站的开发环境设计如何做网站定位
  • 网站建设 呢咕云惠州建设企业网站
  • 网站开发技术入股协议24小时通过网站备案
  • 鞍山外国网站制作wordpress 统计代码添加
  • 都江堰城乡建设局网站百度贴吧官网app下载
  • 想找可以在家做的手工活去什么网站乐清房产在线网
  • 绿色手机网站模板专门做隐形眼镜的网站
  • 做网站管理员开会怎么演讲wordpress后台发布文章发不
  • 网站子页面怎么做网站恶意镜像 301
  • 黄陂区建设局网站建网站找哪个公司
  • 网站做可以退款吗网站建设需要注意哪些关键细节
  • 如何在建设教育协会网站注册考试黄山风景区
  • 网站建设的文档什么网站可以做相册视频
  • 网站的seo方案怎么做南皮网站建设价格
  • pytson做网站安全吗网站开发人员工资水平
  • 0基础自学做网站上海对外贸易公司
  • 深圳网站建设方案书郑州网站seo排名
  • 山西网站开发公司电话门户网站搭建软件
  • 视频门户网站建设服务器网站标题前的小图标怎么做
  • 做网站公司费用平面设计和网站运营
  • 专业苏州网站建设公司关于美食的网页模板
  • 阿里巴巴开通诚信通后网站怎么做江苏做网站怎么收费多少
  • 内江网站建设0832hdsj百度云附件 wordpress
  • 义安区住房和城乡建设局建网站WordPress网站根目录有哪些
  • 网站建设公司 知乎报价表制作
  • 如何做色流量网站国土网站建设自查报告
  • 网站建设市场前景如何网站建设服务开发
  • 帝国做的网站怎么上传图片天津建筑工程公司有哪些
  • 模板网站多钱成都网站软件定制开发
  • 合肥网站建设ahyeda建设网站需要租赁主机吗