c++ - 在 C++ 中同时启动所有线程
问题描述
我有 Rosbag 文件,其中包含有关各种主题的消息,每个主题都有自己的频率。该数据是从硬件设备流数据中捕获的,来自所有主题的数据将同时“到达”以用于不同的算法。
我希望使用 rosbag 文件来模拟这一点(将其视为每个主题都关联了一个数据数组),并且必须同时启动此数据流处理过程,以便数据可以同步。
我通过在不同线程上启动不同的发布者来做到这一点(我也对其他方法持开放态度,这是我能想到的唯一方法。),但是线程不会同时启动,到线程 3 启动时,线程 1 将大大领先。
我怎样才能做到这一点?
编辑 - 我知道在同一时间发射是不可能的,但也许我也可以通过彼此非常接近的发射而逃脱。有什么办法可以确保这一点?
Edit2 - 由于主要目的是在同步中获取数据流,我想知道线程的预热效果(假设 thread1 从 3.3GHz 开始,到 thread2 从 3.2 开始时达到 4.2GHz)。这会产生显着影响吗(我总是可以在开始发布过程之前对其进行预热,但我很好奇它是否会产生明显的影响)
TIA
解决方案
正如其他人在评论中所说,您不能保证线程在完全相同的时间启动。为了解决您的总体目标:从 ROS 的角度来看,您正在以错误的方式解决这个问题。您应该使用rosbag api,而不是手动发布数据并尝试使其同步。这样,您实际上可以保证消息具有相同的时间戳。请注意,这并不能保证它们会同时发送出去,因为它们不会。您可以像这样直接将消息放入包文件中
import rosbag
from std_msgs.msg import Int32, String
bag = rosbag.Bag('test.bag', 'w')
try:
s = String()
s.data = 'foo'
i = Int32()
i.data = 42
bag.write('chatter', s)
bag.write('numbers', i)
finally:
bag.close()
对于包含Header
字段的更复杂类型,只需编辑该header.stamp
部分以保持时间戳一致
推荐阅读
- javascript - Array.prototype.filter() 期望在箭头函数 array-callback-return 的末尾返回一个值
- typescript - Typescript + 将字符串转换为类型并使用类型的大小写
- node.js - 订阅 http get 调用 - 为什么我需要刷新我的前端页面来获取更改后的数据?
- css - SASS 样式根本没有出现
- r - Points within buffer with the same id
- javascript - 如何在 React 17 和 styled-components 中使用 forwardRef 输入输入
- javascript - 对象的最后一个元素在动态添加的 div 中不断重复
- android - “String”类没有实例方法“map”。从 SQLite Flutter 获取数据
- ios - 如何在 SQLite3 中选择特定的列类型?
- r - mlogit :不可能将选择变量强制为逻辑