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

长春火车站现在正常通车吗深圳响应式网站开发

长春火车站现在正常通车吗,深圳响应式网站开发,qq推广网,做的网站响应速度慢qt-C笔记之主线程中使用异步逻辑来处理ROS事件循环和Qt事件循环解决相互阻塞的问题 code review! 文章目录 qt-C笔记之主线程中使用异步逻辑来处理ROS事件循环和Qt事件循环解决相互阻塞的问题1.Qt的app.exec()详解2.ros::spin()详解3.ros::AsyncSpinner详解4.主线程中结合使用…qt-C笔记之主线程中使用异步逻辑来处理ROS事件循环和Qt事件循环解决相互阻塞的问题 code review! 文章目录 qt-C笔记之主线程中使用异步逻辑来处理ROS事件循环和Qt事件循环解决相互阻塞的问题1.Qt的app.exec()详解2.ros::spin()详解3.ros::AsyncSpinner详解4.主线程中结合使用的示例 1.Qt的app.exec()详解 app.exec()是Qt应用程序的主事件循环函数。它是一个阻塞函数负责处理所有的事件和信号并保持应用程序处于运行状态直到退出条件满足为止。 当调用app.exec()时Qt会开始处理事件循环并等待事件的触发。事件可以是来自用户的输入例如鼠标点击、键盘按键或其他系统事件例如定时器事件、网络事件。Qt会不断地从事件队列中获取事件并相应地触发对应的槽函数或事件处理函数。 在事件循环期间Qt应用程序会保持响应并能够实时更新UI界面。所有的UI操作和更新都应该在主线程中进行以确保线程安全性。 只有当退出条件满足时app.exec()才会返回并结束应用程序的运行。在大多数情况下退出条件是用户显式关闭应用程序的主窗口或调用QCoreApplication::quit()函数来请求退出。 需要注意的是app.exec()是一个阻塞函数它会一直运行直到应用程序退出。因此一般情况下应该将需要在app.exec()之后执行的代码放置在适当的位置或者使用信号与槽机制来处理退出时的清理操作。 总结起来app.exec()是Qt应用程序的主事件循环函数负责处理事件并保持应用程序处于运行状态直到退出条件满足。它是编写基于Qt的GUI应用程序的关键部分。 2.ros::spin()详解 ros::spin()是ROS提供的一个阻塞函数用于启动ROS节点的事件循环并等待节点退出的信号。它会一直运行直到接收到终止信号或调用ros::shutdown()函数来请求节点退出。 当调用ros::spin()时ROS节点会开始处理订阅者的消息、服务的请求和其他事件。它会阻塞当前线程持续处理事件直到满足退出条件。 ros::spin()的主要作用是保持ROS节点处于运行状态确保节点能够处理到来的消息和事件。它会等待消息的到达并调用对应的回调函数进行处理。如果没有消息到达ros::spin()会继续等待而不会占用过多的CPU资源。 以下是使用ros::spin()的一般流程 在ROS节点初始化完成后调用ros::spin()函数。ROS节点会开始处理订阅者的消息、服务的请求和其他事件。当有消息到达时ROS会调用对应的回调函数进行处理。如果没有消息到达ros::spin()会继续等待而不会占用过多的CPU资源。当接收到终止信号或调用ros::shutdown()函数时ros::spin()会退出节点的事件循环结束。 需要注意的是ros::spin()是一个阻塞函数它会一直运行直到节点退出。因此一般情况下应该将需要在ros::spin()之后执行的代码放置在适当的位置或者使用信号与槽机制来处理退出时的清理操作。 以下是使用ros::spin()的示例代码片段 // 初始化ROS节点 ros::init(argc, argv, my_node);// 创建ROS节点句柄 ros::NodeHandle nh;// 创建ROS订阅者和其他对象 // ...// 启动ROS事件循环并等待节点退出 ros::spin();// 节点退出后的清理操作 // ...总结起来ros::spin()是ROS提供的一个阻塞函数用于启动ROS节点的事件循环并等待节点退出的信号。它保持节点处于运行状态处理到来的消息和事件并且不会占用过多的CPU资源。 3.ros::AsyncSpinner详解 ros::AsyncSpinner是ROS提供的一个异步事件处理器用于在单独的线程中处理ROS的回调函数和事件循环。它允许ROS节点在执行回调函数的同时继续处理其他任务而不会被阻塞。 当创建一个ros::AsyncSpinner对象并调用其start()函数时它会启动一个新的线程并在该线程中执行ROS的事件循环。事件循环负责处理ROS的回调函数包括订阅者的消息、服务的请求等。 使用ros::AsyncSpinner的好处是它允许ROS节点在单独的线程中并行处理事件而不会阻塞主线程。这对于需要同时进行ROS通信和其他任务例如UI更新、计算等的应用程序特别有用。 以下是使用ros::AsyncSpinner的一般流程 创建ros::AsyncSpinner对象可以设置线程数默认为1来指定并行处理的线程数。调用start()函数启动异步事件循环。在事件循环开始后ROS节点会开始处理订阅者的消息、服务的请求等。主线程可以继续执行其他任务例如处理UI更新、计算等。当应用程序退出时调用ros::AsyncSpinner的stop()函数来停止异步事件循环。 需要注意的是使用ros::AsyncSpinner时确保在主线程中使用ros::NodeHandle对象进行ROS通信而不是在异步事件循环线程中使用。 以下是使用ros::AsyncSpinner的示例代码片段 // 创建ROS异步Spinner指定线程数为1 ros::AsyncSpinner spinner(1); spinner.start();// 在异步事件循环开始后执行其他任务 // ...// 停止异步事件循环 spinner.stop();总结起来ros::AsyncSpinner是ROS提供的一个异步事件处理器用于在单独的线程中处理ROS的回调函数和事件循环。它允许ROS节点在并行处理事件的同时继续执行其他任务提高了应用程序的响应性能。 4.主线程中结合使用的示例 ros::AsyncSpinner是ROS提供的一个类可以在单独的线程中处理ROS的事件循环而不会阻塞Qt的事件循环。你可以在主函数中创建一个ros::AsyncSpinner对象并调用其start()函数来启动ROS事件循环。这样ROS会在独立线程中处理事件而主线程可以继续执行Qt的事件循环。 在这个示例中我们在主函数中创建了一个ros::AsyncSpinner对象spinner并将线程数设置为1。然后通过调用spinner.start()启动ROS事件循环。这样ROS会在独立线程中处理事件而主线程可以继续执行Qt的事件循环。 代码 #include ros/ros.h #include QApplication #include QMainWindow #include ros/spinner.h #include std_msgs/String.h// ROS订阅者回调函数 void rosCallback(const std_msgs::String::ConstPtr msg) {// 处理接收到的消息ROS_INFO(Received message: %s, msg-data.c_str()); }int main(int argc, char** argv) {// 初始化ROS节点ros::init(argc, argv, qt_ros_node);// 创建Qt应用程序QApplication app(argc, argv);// 创建ROS节点句柄ros::NodeHandle nh;// 创建QWidget窗口QMainWindow window;// 设置窗口大小window.resize(800, 600);// 显示窗口window.show();// 创建ROS订阅者ros::Subscriber sub nh.subscribe(topic_name, 10, rosCallback);// 创建ROS异步Spinner指定线程数为1ros::AsyncSpinner spinner(1);spinner.start();// 进入Qt事件循环return app.exec(); }
http://www.dnsts.com.cn/news/104543.html

相关文章:

  • 大学生兼职网站设计论文官方网站建设银行信用卡
  • 小说网站建设方案书海南综合网站
  • 攻击网站步骤正能量不良网站推荐2020
  • 石家庄专业做网站注册电气工程师报考条件
  • 深圳网站建设合同范本买奢侈品代工厂做的产品的网站
  • 织梦网站上传保存文档a wordpress
  • 做网站保存什么格式最好网站缓存优化怎么做
  • 手机网站外链公司网站开发费用济南兴田德润评价
  • 商丘做网站sqlongliqi医疗器械做网站到哪里先备案
  • 做企业网站织梦和wordpress哪个好常州中小企业网站制作
  • 个人网站能不能做论坛房子做水电的时候是不是要先埋网站
  • 张家口建设网站网站建设 有哪些费用
  • wordpress 4.9 站群网站开发进度把握
  • 福建城市建设厅网站哪里可以免费设计装修效果图
  • 瑞昌市建设局网站企业做网站和宣传册的作用
  • 常州网站建设选思创做服装最好的网站有哪些
  • 贵溪市城乡建设局网站wordpress 文件服务
  • 月子中心网站设计哈尔滨网站建设公司有哪些
  • 永久免费网站服务器想开个网站怎样开公司
  • wordpress中英文站点wordpress用ssd服务器的优势
  • 沈阳门户网站建设苏州 网站设计
  • 公司网站推广怎么做万网发布网站
  • 营销型网站建设品牌交互设计英文
  • 惠州专业做网站公司网页升级紧急通知怎么设置
  • 海南省建设集团有限公司网站网站建设和网络营销
  • 住房和城乡建设部网站造价师wordpress 图片木马
  • 深圳龙岗高端网站建设intitle:郑州网站建设
  • 南昌媒体网站建设口碑推荐wordpress模块插件
  • c 网站建设综合报告网页加速器安卓
  • 一个空间可以做几个网站wordpress上传文件插件