紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
如何实现client端发送service后获取response超时的逻辑(非阻塞)
-
有一个业务模块会给多个service发送请求,需要收到各个模块service的response来判断整个系统是正常工作的,然后进行下一步。如何实现超时逻辑,查到有个api是spin_until_future_complete,这个api是阻塞的,不符合要求。如果起timer来判断到时间后future是否有结果,这样写代码会非常凌乱。是否有优雅的方式来做到?
-
@siceanfly 要判断系统每个节点是否正常,可以尝试生命周期节点。不知道你的逻辑里这个业务模块是如何触发的
-
@小鱼 有生命周期的判断,还要判断下这次调用是否超时,有些service会两分钟后才有response,这种情况是要报错的
-
@siceanfly 在服务的回调函数里写标志,然后在用的 地方等待或者判断这个标志
-
@小鱼 可能我没描述清楚,比如我发了一个nodeA里给nodeB发了一个叫/add_two_ints的service,结果nodeB1分钟后才返回我response,我希望如果nodeA发现10秒钟没有收到就打一个超时log,但是我不想发送的时候还起一个timer,有接口可以设timeout的参数,同时不阻塞nodeA的办法吗?
-
@siceanfly 没有比较好的办法,不堵塞到是有,使用多线程回调组就可以了,除此之外使用timer其时也挺好的,定时一次就取消就行,检测完就停下来。
一次性发送多个服务可以全部发送异步的 auto future = client->async_send_request(my_request); ,然后将future存下,10s后检测future状态就可以进行处理了。