我有一个函数应该在受控的时间内运行。但是这个函数使用了
pcl::StatisticalOutlierRemoval
,除了任意杀死线程之外,我没有找到任何合理的方法来取消这个函数。
我有这样的东西:
void cloud_filtering(pcl::PointCloud<pcl::PointXYZRGB>::SharedPtr pcl_unfilt, pcl::PointCloud<pcl::PointXYZRGB>::SharedPtr pcl_filt) const{
// do something
pcl::StatisticalOutlierRemoval<pcl::PointXYZRGB> sor;
sor.setInputCloud(*pcl_unfilt);
sor.setMeanK(50);
sor.setStddevMulThresh(1.0);
sor.filter(*pcl_filt);
// do something
}
这个函数是由一个独立的线程执行的,应该有一些超时。 该线程使用 std::async 启动,并使用返回的 future 检查完成情况。
auto future = std::async(
std::launch::async,
&cloud_filtering,this,pcl_unfilt,pcl_filt
)
通常,这个函数执行得相当快,但并非总是如此,我并不真的需要所有的响应(这取决于函数的采样输入)。所以我想做的是,如果函数花费的时间超过给定的超时时间,它会被安全地取消,这样我就可以启动一个包含其他示例的新线程。
安全取消是指避免内存泄漏或僵尸线程。