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

太原模板建站厦门网站建设模拟平台

太原模板建站,厦门网站建设模拟平台,wordpress.备份,广州知名网络推广公司【前言】 众所周知,ROS中的所有回调函数,都由 ros::spin() 这个家伙来统一管理和唤醒。这里说的是所有通过ROS方式创建出来的回调函数,比如ros::Subscriber、ros::Timer等等的回调函数。 【举例】 我们先来看一个示例节点: #i…

【前言】

众所周知,ROS中的所有回调函数,都由 ros::spin() 这个家伙来统一管理和唤醒。这里说的是所有通过ROS方式创建出来的回调函数,比如ros::Subscriber、ros::Timer等等的回调函数。

【举例】

我们先来看一个示例节点:

#include <ros/ros.h>
#include <cstdlib>
#include <time.h>
#include <iostream>void test_1()
{usleep(200 * 1000);ROS_INFO("test 1");
}void test_2()
{ROS_INFO("test 2");
}int main(int argc, char** argv)
{ros::init(argc, argv, "test_node");ros::NodeHandle nh;ros::Timer timer_1 = nh.createTimer(ros::Duration(0.1), [&](const ros::TimerEvent &){test_1();});ros::Timer timer_2 = nh.createTimer(ros::Duration(0.05), [&](const ros::TimerEvent &){test_2();});ros::spin();return 1;
}

你猜 timer_2 定时器的回调函数 test_2() 的实际运行频率是多少?会是我们设置的0.05秒一次吗?

很遗憾,test_2() 的实际运行频率是 0.2秒一次!

聪明的你肯定已经察觉出端倪,test_1() 这个回调中阻塞了200毫秒,并且它也影响了 test_2() 的调用。

没错,ros::spin() 是通过单线程的方式,管理所有回调函数的!!!

【出路】

那如果我们的节点中,有些回调函数确实需要执行一些复杂操作,导致回调执行被阻塞一段时间,我们又该怎么办呢?

此时,我们应该把 spin() 替换成 ros::AsyncSpinner ,也就是异步的多线程回调执行器!同样是上面的代码,我们做一下修改:

#include <ros/ros.h>
#include <cstdlib>
#include <iostream>
#include <time.h>void test_1()
{usleep(200 * 1000);ROS_INFO("test 1");
}void test_2()
{ROS_INFO("test 2");
}int main(int argc, char** argv)
{ros::init(argc, argv, "test_node");ros::NodeHandle nh;ros::Timer timer_1 = nh.createTimer(ros::Duration(0.1), [&](const ros::TimerEvent &){test_1();});ros::Timer timer_2 = nh.createTimer(ros::Duration(0.05), [&](const ros::TimerEvent &){test_2();});ros::AsyncSpinner spinner(4);           //非阻塞式的spinner, 可以使用start和stop进行启停spinner.start();                        //启动线程ros::waitForShutdown();return 1;
}

再次运行这个节点,你会发现,test_2() 的执行频率变成了我们期望的 20Hz了。

注意:上面代码中的 spinner(4) 代表开启4个线程循环,你可以根据你的运行环境,设置影响的线程数量。

http://www.15wanjia.com/news/175483.html

相关文章:

  • 免费的网站推广渠道地方文明网站建设措施
  • 校园二手交易网站开发背景“网站制作”
  • 用jq和ajax做能登陆注册的一个网站python基础教程下载
  • 企业网站打不开什么原因黄岛做网站找哪家好
  • 网站如何做mip网站多久才能在百度上收到
  • 自己做网站打开很卡公众号版面设计创意
  • 软件公司网站wordpress 目录排序
  • 网上怎么做网站赚钱网站做好是需要续费的吗
  • 关于网站建设报告山西高端建设网站
  • 帝国网站地图模板个人可以做建站网站么
  • 建筑网站architect个人网站怎么申请
  • 做网站哪个地方需要钱十大网络平台
  • 网站开发公司资讯企业网站包含的要素
  • 公司网站建设申请报告网络平台怎么做
  • wordpress 主题 名站网站seo优化技术入门
  • 四川省建设监理协会官方网站百度指数怎么分析
  • html网站的规划与建设6施工企业经营情况汇报材料
  • 建立一个网站英语大型网站 建设意义
  • 学校网站模板wordpress的主题切换不成功
  • 常州网站建设选思创十大编程语言
  • 传统旅行社如何建设网站东莞市住建局网
  • 友链交换网站国外素材网站
  • 网站建立基本流程网站挂马黑链检测清除工具
  • django 企业网站开发如何做网站打广告
  • 网站建设教程答允苏州久远网络wordpress怎么上传主题
  • 玉树州公司网站建设安阳吧贴吧
  • 南岸网站建设哪家好wordpress自定义登录框插件
  • 做网站的是什么东莞比较出名的网站建设公司
  • 旅游攻略的网站怎么做空间 网站
  • 做群头像的网站在线成都网站注册