void SVD_thread1(grid_map::GridMap& map, double *b, int a );
void SVD_thread2(grid_map::GridMap& map, double *b, int a );
#函数调用
{
std::thread t1(&FiltersDemo::SVD_thread1, this, ref(map), b, a);
std::thread t2(&FiltersDemo::SVD_thread2, this, ref(map), b, a);
t1.join();
t2.join(); //等待线程完成
}
在一个类里使用多线程调用,可以如上述方式,这比使用pthread类简单许多。使用thread类调用多线程需要注意参数的传递,若是引用,需要写成ref()。
发现上述的代码会报错,需要进行如下改变:
void SVD_thread1(grid_map::GridMap& map, void *c, int a ){
double *b;
b = (double*) c;
}
#函数调用
{
double *b;
void *c;
c = b;
std::thread t1(&FiltersDemo::SVD_thread1, this, ref(map), c, a);
}
中间数据需要通过void a进行传递,其实际传递的只是一个指针。究其中间需要转换的原因,可能库中没有定义double a的数据类型。
网友评论