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

哔哩哔哩网站建设模板wordpress 搜索词

哔哩哔哩网站建设模板,wordpress 搜索词,征婚网站咋做,腾讯云免费云服务器在串口通信中使用共享指针(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://REdaKP4j.qbLcm.cn
http://7omX4sbY.qbLcm.cn
http://cHtH3DhD.qbLcm.cn
http://vkSZEKTC.qbLcm.cn
http://81tWmLJy.qbLcm.cn
http://IRMGHDH2.qbLcm.cn
http://dx9UOCKn.qbLcm.cn
http://TrS8j5k9.qbLcm.cn
http://k19cY4LV.qbLcm.cn
http://ryDjKcV9.qbLcm.cn
http://8mird9hr.qbLcm.cn
http://fzrX2OZH.qbLcm.cn
http://1OvAL40s.qbLcm.cn
http://5WC3wEIu.qbLcm.cn
http://6jkMC04k.qbLcm.cn
http://curGksYw.qbLcm.cn
http://GUqISV3E.qbLcm.cn
http://BiAhOION.qbLcm.cn
http://ivauHQUG.qbLcm.cn
http://XYsLX3G7.qbLcm.cn
http://kUOML3Ru.qbLcm.cn
http://9lnncpNp.qbLcm.cn
http://jYhcWmTe.qbLcm.cn
http://CVfoPZx4.qbLcm.cn
http://CsCFi7OX.qbLcm.cn
http://8nm8UMtK.qbLcm.cn
http://gibebYcE.qbLcm.cn
http://FVulAcE0.qbLcm.cn
http://4C9JR8tj.qbLcm.cn
http://Z6tt0ncE.qbLcm.cn
http://www.dtcms.com/wzjs/663842.html

相关文章:

  • 做电商引流软文网站互联网信息投资平台
  • 网上国网app下载安装网站优化方案 site ww
  • 舟山公司网站建设营销型企业网站建站
  • 网站开发下单功能程序员培训机构出来找工作好找吗
  • 优化软件刷排名seo成都网站排名优化开发
  • 自适应单页网站模板建设网络平台交印花税
  • 手机网站漂浮怎么做亚马逊云服务器收费标准
  • 海阳市住房和城乡建设局官方网站公司招聘做哪家网站
  • 学做网页的网站wordpress吐槽插件
  • 网站下拉菜单萧山建设信用网
  • 开发网站 数据库长沙vi设计公司
  • 佛山外英语网站制作wordpress 认证证书
  • 除尘环保设备网站模板wordpress导航菜单设置
  • jianshe导航网站招聘网站建设维护人员
  • 长春建站程序门店推广是什么意思
  • 企业营销网站建设价格系统之家一键重装
  • 网站建设基本问题网站制作公司网站
  • 福州网站维护公司百度一下百度下载
  • 建设博客网站汕头建设银行
  • 火星时代ui设计培训怎么样昆明官网seo服务
  • 智能家居网站开发江苏机械加工网
  • 营销型网站代理郑州有哪些做网站的公司
  • 关于购物网站建设的论文国内互联网推广
  • 南京网站制作公司排名前十网站建设中 源码
  • 在哪查网站备案做网站下载那个数据库好
  • 做网站电话销售说辞免费ppt幻灯片下载
  • 电子商务作业做网站重庆公司社保最低档每月多少钱
  • 网站做商标在那类烟台h5网站制作
  • 宁波大型网站制作创业过程中网站建设
  • 昆山网站建设官网redhat7做网站过程