单个的double,int,或者struct 无法满足线程间的通信
------ 需要使用 std::atomic<Mynt_d*> mynt_data;
1、先定义struct \ class
struct Mynt_frame_data{
double img_time;
cv::Mat imLeft,imRight;
std::vector<ORB_SLAM3::IMU::Point > imu;
};
class Mynt_d{
public:
Mynt_d() {
};
~Mynt_d() = default;
public:
std::vector<Mynt_frame_data > frame_data;
};
2、使用Mynt_d进行线程通信
- 2.1 定义并初始化
class Slam_mynt{
public:
Slam_mynt(){
mynt_data=new Mynt_d();
};
bool init();
bool mynt_init();
bool Mynt_Slam3();
public:
std::atomic<Mynt_d*> mynt_data;
std::thread mynt_init_thread,mynt_slam_thread;
};
bool Slam_mynt::init() {
mynt_init_thread=std::thread(&Slam_mynt::mynt_init,this);
sleep(10);
mynt_slam_thread=std::thread(&Slam_mynt::Mynt_Slam3,this);
return false;
}
- 2.2 调用
bool Slam_mynt::mynt_init() {
while(true){
Mynt_d* my=mynt_data.load();
/*储存操作 \ 读取操作*/
}
}
bool Slam_mynt::Mynt_Slam3() {
while(true){
Mynt_d* my=mynt_data.load();
/*储存操作 \ 读取操作*/
}
}
这样即可在多个线程里面愉快的共享数据了。