点云库(PCL)过滤超时

问题描述 投票:0回答:0

我有一个函数应该在受控的时间内运行。但是这个函数使用了

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
)

通常,这个函数执行得相当快,但并非总是如此,我并不真的需要所有的响应(这取决于函数的采样输入)。所以我想做的是,如果函数花费的时间超过给定的超时时间,它会被安全地取消,这样我就可以启动一个包含其他示例的新线程。

安全取消是指避免内存泄漏或僵尸线程。

c++ multithreading ros pcl
© www.soinside.com 2019 - 2024. All rights reserved.