void SVD_thread1(grid_map::GridMap& map, double *b, int a );
void SVD_thread2(grid_map::GridMap& map, double *b, int a );
#函數(shù)調(diào)用
{
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(); //等待線程完成
}
在一個(gè)類(lèi)里使用多線程調(diào)用,可以如上述方式擦耀,這比使用pthread類(lèi)簡(jiǎn)單許多棉圈。使用thread類(lèi)調(diào)用多線程需要注意參數(shù)的傳遞,若是引用眷蜓,需要寫(xiě)成ref()分瘾。
發(fā)現(xiàn)上述的代碼會(huì)報(bào)錯(cuò),需要進(jìn)行如下改變:
void SVD_thread1(grid_map::GridMap& map, void *c, int a ){
double *b;
b = (double*) c;
}
#函數(shù)調(diào)用
{
double *b;
void *c;
c = b;
std::thread t1(&FiltersDemo::SVD_thread1, this, ref(map), c, a);
}
中間數(shù)據(jù)需要通過(guò)void a進(jìn)行傳遞,其實(shí)際傳遞的只是一個(gè)指針吁系。究其中間需要轉(zhuǎn)換的原因德召,可能庫(kù)中沒(méi)有定義double a的數(shù)據(jù)類(lèi)型。