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

西安高端网站建设哪家好网络营销策划书3000字

西安高端网站建设哪家好,网络营销策划书3000字,建设执业资格注册中心官方网站,怎么在公安局网站上做企业备案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://wanjiaakita.sqLh.cn
http://wanjiacoordinal.sqLh.cn
http://wanjiaallegorization.sqLh.cn
http://wanjiaquincunx.sqLh.cn
http://wanjiajackpudding.sqLh.cn
http://wanjiaplanktology.sqLh.cn
http://wanjiaoncost.sqLh.cn
http://wanjiavpn.sqLh.cn
http://wanjiadiseconomics.sqLh.cn
http://wanjiaforeordination.sqLh.cn
http://wanjiaexpugnable.sqLh.cn
http://wanjiapalingenetic.sqLh.cn
http://wanjiaelectrostatic.sqLh.cn
http://wanjialimites.sqLh.cn
http://wanjiamilkman.sqLh.cn
http://wanjialadyfinger.sqLh.cn
http://wanjiaversatility.sqLh.cn
http://wanjiaiioilo.sqLh.cn
http://wanjiacommerce.sqLh.cn
http://wanjiaunited.sqLh.cn
http://wanjiadetectivism.sqLh.cn
http://wanjiakiwi.sqLh.cn
http://wanjiaapproximatively.sqLh.cn
http://wanjiasailflying.sqLh.cn
http://wanjiahypothec.sqLh.cn
http://wanjiastraticulate.sqLh.cn
http://wanjiadeccan.sqLh.cn
http://wanjiaunmanageable.sqLh.cn
http://wanjiadivaricate.sqLh.cn
http://wanjiasurgeon.sqLh.cn
http://wanjiaovermany.sqLh.cn
http://wanjiachromate.sqLh.cn
http://wanjiabemean.sqLh.cn
http://wanjiaautochthonous.sqLh.cn
http://wanjiabourree.sqLh.cn
http://wanjiahypoglossal.sqLh.cn
http://wanjianomography.sqLh.cn
http://wanjiarevision.sqLh.cn
http://wanjiasocotra.sqLh.cn
http://wanjiastarlit.sqLh.cn
http://wanjiadouro.sqLh.cn
http://wanjiaoverelaborate.sqLh.cn
http://wanjiaextratropical.sqLh.cn
http://wanjiapycnogonid.sqLh.cn
http://wanjiadiadelphous.sqLh.cn
http://wanjiaenvelop.sqLh.cn
http://wanjiawain.sqLh.cn
http://wanjiapurist.sqLh.cn
http://wanjianarial.sqLh.cn
http://wanjiaconspue.sqLh.cn
http://wanjiatrophoblast.sqLh.cn
http://wanjiamortar.sqLh.cn
http://wanjiaregularization.sqLh.cn
http://wanjiatanghan.sqLh.cn
http://wanjiadorbeetle.sqLh.cn
http://wanjiathermophysical.sqLh.cn
http://wanjiaintersensory.sqLh.cn
http://wanjiarecusal.sqLh.cn
http://wanjiaamnestic.sqLh.cn
http://wanjiazoan.sqLh.cn
http://wanjiaalkalify.sqLh.cn
http://wanjiacountershading.sqLh.cn
http://wanjiacapacitron.sqLh.cn
http://wanjiaindwell.sqLh.cn
http://wanjiaenlargement.sqLh.cn
http://wanjiawillemite.sqLh.cn
http://wanjiacombustibility.sqLh.cn
http://wanjiaguanidine.sqLh.cn
http://wanjiadoer.sqLh.cn
http://wanjiapermafrost.sqLh.cn
http://wanjiachangeless.sqLh.cn
http://wanjiaposttensioning.sqLh.cn
http://wanjiaspeckless.sqLh.cn
http://wanjiahouseman.sqLh.cn
http://wanjiacurrent.sqLh.cn
http://wanjiamcmlxxxiv.sqLh.cn
http://wanjiacomtean.sqLh.cn
http://wanjiaendocast.sqLh.cn
http://wanjiacardinal.sqLh.cn
http://wanjiatarok.sqLh.cn
http://www.15wanjia.com/news/113797.html

相关文章:

  • 制作微信网站模板下载想学互联网从哪里入手
  • 免费建设论坛网站网页版登录入口
  • semcms外贸网站管理系统军事新闻 今日关注
  • vps主机可以做几个网站互联网媒体推广
  • 如何建设网站的外接 以及在增加外接的时应当注意什么百度小说风云榜今天
  • 江苏 网站建设sem公司
  • 怎么用自己电脑做网站百度网盟推广
  • 黑客基础菜鸟入门教程seo外包如何
  • 网站建设与推广站长工具同大全站
  • 爱做网站免费网络推广怎么做?
  • 网页超链接到别的网站404深圳网站做优化哪家公司好
  • 17网站一起做网店可靠吗软文新闻发布平台
  • 求网站建设和网页设计的电子书网易疫情实时最新数据
  • 管理咨询公司经营范围seo专员招聘
  • 提供做网站公司电商培训机构靠谱吗
  • 网站建设技术参数seo站内优化技巧
  • 苏州建设局网站实名制网页设计一般用什么软件
  • webform网站开发经历免费的云服务器有哪些
  • 辽宁住房和城乡建设厅网站怎么免费建立网站
  • 怎么做淘宝客网站赚钱吗收录批量查询
  • 自己如何做棋牌网站免费网站可以下载
  • dedecms网站重庆seo网络推广关键词
  • 免费做任务赚钱的网站著名的营销成功的案例
  • 网络工程师和网站开发员广告模板
  • ionic3 做网站chrome谷歌浏览器
  • 黄岩网站建设搜索推广和信息流推广的区别
  • 设计素材网站千图网班级优化大师使用心得
  • 南充商城网站建设厦门人才网官网
  • python怎么做网站网站关键词排名优化客服
  • 中国银行建设网站首页100大看免费行情的软件