在类的不同实例的不同线程中使用"pcl::visualization"
using "pcl::visualization" in different threads from different instance of a class
我想要一个在云点上包含一个可视化工具的类。这是我的代码:
class my_vis
{
void vis_func ()
{
pcl::visualization::PCLVisualizer *vis ;
vis = new pcl::visualization::PCLVisualizer("octree viewer");
// this "vis" is just used in this function and no other place
}
void execute(){
//Start visualizer in a thread
boost::thread* visThread = new boost::thread(boost::bind(&my_vis::vis_func, this));
// bla bla
}
}
int main ()
{
my_vis vis1();
vis1.execute();
my_vis vis2();
vis2.execute();
std::getchar();
return 0 ;
}
现在我有一类可视化工具,可以在"main"中实例化。 当我只从类"my_vis"创建一个实例时,程序运行时一切都很好。但我需要两个或更多实例。当我初始化多个实例时,发生了错误:BLOCK_TYPE_IS_VALID我认为这是因为使用了线程。但是线程在我的项目中是必需的。
你能帮帮我吗?非常感谢您的患者和帮助:)
附言我正在使用 PCL 1.7
两天后,我终于解决了这个问题。
我关注 pcl::visual::P CLVisualizer 和"SpinOnce"函数的构造函数,我认识到如果你放一个静态锁,这样多个对象中的一个线程就可以访问这些函数,那么问题就会得到解决。
以前,我在这些函数上放置了非静态锁,如您所知,本地锁只在创建它们的同一对象中工作(而不是从类实例化的整个对象)。所以我在类中定义了一个静态锁my_vis:
private static boost::mutex vis_mutex;
boost::mutex my_vis::vis_mutex; //storage for static lock
并将"vis->spinOnce(1)"替换为
{
boost::mutex::scoped_lock vis_lock(vis_mutex);
vis->spinOnce ();
}
我仍然认为这不是一个永久的解决方案,这个错误最好由 pcl 开发人员解决:)
相关文章:
- 如何获取pcl迭代最近点(ICP)的迭代点数?
- 将 PCL 链接到 Cython C++ 模块
- PCL:当我在setConditionFunction中使用std::bind 时,没有合适的转换函数
- PCL octree std::bad_alloc c++
- 在点云库 (PCL) 中使用自定义点类型的问题
- PCL 出错:体系结构x86_64 @pcl的未定义符号
- PCL:将两个点云缩放到相同的大小
- 在同一项目中使用 CGAL 和 PCL
- PCL 中的 GICP 用法
- 退出 PCL 查看器:即使窗口已关闭,wasStop() 也不会更改值
- 使用pcl transformcloud将三维点平移并旋转到原点
- 使用pcl库设置错误
- 如何在ROS中使用PCL可视化动力学数据的表面法线
- 增加 PCL 中点云的点大小以实现可视化
- 在C++中使用 PCL 在同一窗口中查看多个点云
- 删除 PCL 可视化工具中定义的 3D 框外部的点
- 在 PCL 可视化工具中打印所选点的 3D 坐标
- 从源代码构建 pcl 1.7.2
- 在类的不同实例的不同线程中使用"pcl::visualization"
- PCL - 错误 C2039:'setSize':不是 'pcl::visualization::PCLVisualizer' 的成员