2019-03-07 C++同步线程std::thread参数传递

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的数据类型。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。