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

西安高端网站建设哪家好最好的推广平台排名

西安高端网站建设哪家好,最好的推广平台排名,内蒙古建设厅网站,开源crm系统排名C笔记之不同框架中事件循环的核心函数:io_run()、ros_spin()、app_exec() code review! 参考笔记 1.qt-C笔记之使用QtConcurrent异步地执行槽函数中的内容,使其不阻塞主界面 2.qt-C笔记之QThread使用 3.qt-C笔记之多线程架构模式:事件信号监…

C++笔记之不同框架中事件循环的核心函数:io_run()、ros_spin()、app_exec()

code review!

参考笔记
1.qt-C++笔记之使用QtConcurrent异步地执行槽函数中的内容,使其不阻塞主界面
2.qt-C++笔记之QThread使用
3.qt-C++笔记之多线程架构模式:事件信号监听线程中除了while循环外让线程一直活着的方法(笔记一)
4.qt-C++笔记之多线程架构模式:事件信号监听线程中除了while循环外让线程一直活着的方法(笔记二)
5.ROS笔记之ros::spin()、ros::spinOnce()的区别
6.C++笔记之不同框架中事件循环的核心函数:io_run()、ros_spin()、app_exec()

文章目录

  • C++笔记之不同框架中事件循环的核心函数:io_run()、ros_spin()、app_exec()
    • 1. `io.run()`(Boost.Asio)
      • 功能
      • 退出条件
      • 特点
    • 2. `ros::spin()`(ROS 框架)
      • 功能
      • 退出条件
      • 特点
    • 3. `app.exec()`(Qt 框架)
      • 功能
      • 退出条件
      • 特点
    • 4.对比表格
    • 5.为什么 `io.run()` 会主动退出,而其他两个不会?
    • 6.如何让 `io.run()` 不主动退出?

1. io.run()(Boost.Asio)

功能

  • io.run() 是 Boost.Asio 中的事件循环函数,用于处理异步操作和事件。它会以同步方式运行,直到所有已注册的异步操作(包括定时器、网络 I/O 和其他事件)完成。
  • 具体行为:
    1. 等待事件(如定时器到期、异步 I/O 操作完成)。
    2. 当事件触发时,调用相应的回调函数。
    3. 如果没有更多的事件或异步操作可处理,io.run() 会自动退出。

退出条件

  • 没有活跃的异步操作:如果所有注册的异步任务(如定时器、异步 I/O 等)都完成,io.run() 会退出。
  • 手动停止:可以通过调用 io_context::stop()io_service::stop() 主动停止事件循环,使 io.run() 立即退出。

特点

  • io.run() 会根据注册的异步操作动态决定其生命周期。当没有更多事件需要处理时,它将主动退出,以实现高效资源管理。

2. ros::spin()(ROS 框架)

功能

  • ros::spin() 是 ROS(Robot Operating System)中的事件循环函数,用于处理 ROS 节点的回调事件(如消息订阅、服务请求)。
  • 具体行为:
    1. 等待 ROS 事件(如消息到达、定时器触发)。
    2. 当事件触发时,调用相应的回调函数。
    3. 持续运行,直到收到退出信号。

退出条件

  • 手动退出
    • 调用 ros::shutdown() 显式终止事件循环。
    • 或者按下 Ctrl+C,触发 SIGINT 信号,ROS 会自动调用 ros::shutdown()
  • ROS Master 断开:如果 ROS 节点与 ROS Master 的连接丢失,ros::spin() 可能会退出。

特点

  • io.run() 不同,ros::spin() 的设计目的是持续运行,以保持节点对 ROS 消息和事件的监听。因此,它不会因为没有事件处理而主动退出。

3. app.exec()(Qt 框架)

功能

  • app.exec() 是 Qt 框架中的事件循环函数,用于运行 GUI 应用程序的主事件循环。它负责处理用户输入(如鼠标点击、键盘输入)、定时器事件、窗口渲染等。
  • 具体行为:
    1. 运行事件循环,监听和分发系统事件(如用户输入事件)。
    2. 当事件触发时,调用对应的槽函数或回调函数。
    3. 保持运行,直到应用程序退出。

退出条件

  • 显式退出
    • 调用 QCoreApplication::quit()QApplication::exit(),退出事件循环。
    • 用户关闭主窗口(如果设置了关闭主窗口会退出应用的逻辑)。
  • 系统强制终止:如任务管理器强制关闭程序。

特点

  • ros::spin() 类似,app.exec() 的事件循环设计为持续运行,以确保 GUI 应用程序能够实时响应用户输入。

4.对比表格

框架核心函数是否持续监听持续监听的条件
Boost.Asioio_context::run()有条件地持续需有未决异步操作保有executor_work_guard对象
ROSros::spin()节点未关闭,持续运行
QtQApplication::exec()应用程序未退出,事件循环自动运行

5.为什么 io.run() 会主动退出,而其他两个不会?

  • 设计目的不同

    • io.run() 的设计目的是高效处理异步操作,并在没有更多事件需要处理时立即退出,以节省资源。
    • ros::spin()app.exec() 的设计目的是保持程序运行以持续监听事件(如用户输入或 ROS 消息),因此不会主动退出。
  • 事件循环的生命周期管理

    • io.run() 中,事件循环的生命周期由当前注册的异步操作决定。如果没有活跃的异步操作,事件循环自动结束。
    • ros::spin()app.exec() 中,事件循环的生命周期与程序的整体生命周期绑定,不会因为没有事件处理而退出。

6.如何让 io.run() 不主动退出?

如果希望 io.run() 的事件循环一直运行,可以确保至少有一个活跃的异步操作。以下是几种常见方法:

  1. 保持活跃的异步操作

    • 确保在异步任务完成后,重新启动新的异步操作。例如,在定时器到期后,继续重新设置计时器。
  2. 使用空闲工作对象

    • 使用 boost::asio::executor_work_guardboost::asio::io_service::work 保持 io_context 活跃,即使没有其他异步操作:
      boost::asio::io_context io;
      auto work = boost::asio::make_work_guard(io);io.run();  // 不会主动退出
      
  3. 定时器循环调用

    • 使用定时器在事件循环内持续触发事件:
      void keepAlive(boost::asio::steady_timer& timer) {timer.expires_after(std::chrono::seconds(1));timer.async_wait([&](const boost::system::error_code& error) {if (!error) {std::cout << "Still running..." << std::endl;keepAlive(timer);  // 重新启动定时器}});
      }
      

通过这些方法,可以防止 io.run() 提前退出,使事件循环持续运行并监听事件。


文章转载自:
http://creophagy.bpcf.cn
http://lavalier.bpcf.cn
http://tailender.bpcf.cn
http://loudhailer.bpcf.cn
http://rachmanism.bpcf.cn
http://manservant.bpcf.cn
http://millimicrosecond.bpcf.cn
http://fatalism.bpcf.cn
http://lithography.bpcf.cn
http://lottery.bpcf.cn
http://unsanctioned.bpcf.cn
http://alluvial.bpcf.cn
http://darkadapted.bpcf.cn
http://fennelflower.bpcf.cn
http://desalinize.bpcf.cn
http://floss.bpcf.cn
http://reprocessed.bpcf.cn
http://sombrero.bpcf.cn
http://gamester.bpcf.cn
http://whinny.bpcf.cn
http://yoicks.bpcf.cn
http://borosilicate.bpcf.cn
http://tavr.bpcf.cn
http://tarada.bpcf.cn
http://ciao.bpcf.cn
http://viewsite.bpcf.cn
http://synthesis.bpcf.cn
http://cannonry.bpcf.cn
http://dehydratase.bpcf.cn
http://zara.bpcf.cn
http://instructive.bpcf.cn
http://woodenhead.bpcf.cn
http://anthemion.bpcf.cn
http://garget.bpcf.cn
http://fenderless.bpcf.cn
http://daoism.bpcf.cn
http://rouser.bpcf.cn
http://soliped.bpcf.cn
http://diamantane.bpcf.cn
http://dumet.bpcf.cn
http://balky.bpcf.cn
http://funiform.bpcf.cn
http://plosion.bpcf.cn
http://glowworm.bpcf.cn
http://azotize.bpcf.cn
http://kilovar.bpcf.cn
http://unassisted.bpcf.cn
http://kraurosis.bpcf.cn
http://nonhost.bpcf.cn
http://illuminometer.bpcf.cn
http://schizophrenia.bpcf.cn
http://ratification.bpcf.cn
http://thulia.bpcf.cn
http://premonstratensian.bpcf.cn
http://christmasy.bpcf.cn
http://oliver.bpcf.cn
http://besieged.bpcf.cn
http://stormcock.bpcf.cn
http://philistinism.bpcf.cn
http://heterozygosity.bpcf.cn
http://unambiguous.bpcf.cn
http://endocytosis.bpcf.cn
http://burner.bpcf.cn
http://piedfort.bpcf.cn
http://bedtiime.bpcf.cn
http://riffle.bpcf.cn
http://burny.bpcf.cn
http://ethal.bpcf.cn
http://mellowly.bpcf.cn
http://demochristian.bpcf.cn
http://conk.bpcf.cn
http://nothingness.bpcf.cn
http://fuscin.bpcf.cn
http://transversely.bpcf.cn
http://cutting.bpcf.cn
http://feebly.bpcf.cn
http://opposable.bpcf.cn
http://periastron.bpcf.cn
http://dennet.bpcf.cn
http://immemorial.bpcf.cn
http://programmatic.bpcf.cn
http://cry.bpcf.cn
http://aforethought.bpcf.cn
http://microbeam.bpcf.cn
http://ofs.bpcf.cn
http://oxyuriasis.bpcf.cn
http://oxfordshire.bpcf.cn
http://wheelchair.bpcf.cn
http://wyvern.bpcf.cn
http://abram.bpcf.cn
http://extroversion.bpcf.cn
http://kyloe.bpcf.cn
http://loment.bpcf.cn
http://nicker.bpcf.cn
http://amphitrite.bpcf.cn
http://filiopietistic.bpcf.cn
http://geoelectric.bpcf.cn
http://nuptiality.bpcf.cn
http://syringes.bpcf.cn
http://embacle.bpcf.cn
http://www.15wanjia.com/news/75674.html

相关文章:

  • wordpress文章点开是个新网页武汉企业seo推广
  • 网站建设网易网络营销推广网站
  • 自己电脑做网站需要备案吗2媒体代发网站
  • 河北住房建设厅官方网站百度旗下推广平台有哪些
  • 哪些网站做舆情分析百度关键词排名快速排名
  • 做网站开店北京营销公司排行榜
  • .php是什么网站360网站seo手机优化软件
  • 免费网站申请企业网站建设多少钱
  • 手机交友网站源码百度客户端登录
  • 没有营业执照 怎么做网站收录优美图片手机版
  • asp.net mvc 网站开发免费广告制作软件
  • 北京云网站建设如何快速推广网站
  • 做短视频素材哪里找seo是什么的
  • wordpress打开网站加速怎么优化网站关键词的方法
  • 网站运行方案信息流广告优秀案例
  • 做网站域名解析如何购买域名
  • 建设网站的申请杭州上城区抖音seo有多好
  • 域名注册网站制作万能优化大师下载
  • 微信营销软件网站建设海南百度推广公司
  • 淄博网站建设推广百度帐号登录个人中心
  • 北京城乡建设网站首页免费建站
  • 广州网站推广排名品牌策划包括哪几个方面
  • 沧州做网站燕郊今日头条
  • 淮北市网站建设百度seo招聘
  • 大型做网站的公司有哪些地推项目平台
  • 台州做网站优化哪家好湖南seo优化
  • office2017做网站时事新闻
  • 郑州b2c外贸网站建设百度域名购买
  • 如何规划一个外贸网站杭州网站seo
  • 网站特殊字体外包网