PCL:如何继续刷新查看器窗口?

时间:2014-04-28 15:52:05

标签: c++ multithreading point-cloud-library

我遇到了麻烦。

我在这里搜索了一个答案,我读到了这个:

Stream of Cloud Point Visualization using PCL

但我不明白这是怎么做的。

我需要使用一个单独的线程来向PCL查看器显示存储在C ++中的一组点...这个数组将在每次详细说明时从另一个线程更新,清理并用新点重新填充。

我需要PCL窗口它是这些点的实时可视化器......因此,在其他线程的每个新的结尾处,可视化更新他的绘制。

这是我程序中的可视化功能代码:

void VisualizzaPointCl()
{
      //dichiarazione del cloud
    pcl::PointCloud<pcl::PointXYZ>::Ptr basic_cloud_ptr (new pcl::PointCloud<pcl::PointXYZ>);

       //Creazione del cloud

       for (int i=0;i<Clist.size();i++)
       {
            pcl::PointXYZ basic_point;
            basic_point.x = Clist[i].x;
            basic_point.y = Clist[i].y;
            basic_point.z = Clist[i].z;
            basic_cloud_ptr->points.push_back(basic_point);
        }

       //puntatore al cloud
      basic_cloud_ptr->width = (int) basic_cloud_ptr->points.size ();
      basic_cloud_ptr->height = 1;

       //avvia il viewer
      boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
      viewer = simpleVis(basic_cloud_ptr);

  //--------------------
  // -----loop-----
  //--------------------
  while (!viewer->wasStopped ())
  {
    viewer->spinOnce (100,true);
    boost::this_thread::sleep (boost::posix_time::microseconds (100000));
  }
}

如果我在每次详细说明时启动此功能,输出它就可以,但阻止我的程序流程......

请帮助我,我该怎么办?

1 个答案:

答案 0 :(得分:2)

您正在运行无限循环。

解决方案是将您的函数放在一个单独的线程中(或者在每个帧中的其余代码后调用spinOnce)。