在 C++ 进程之间共享 CGAL 的几何图形

2024-01-19

我正在寻找在进程之间发送 CGAL 几何图形的最快方法(C++)。假设我们有 2 个进程 - A 和 B。进程 A 正在生成几何图形,进程 B 正在显示它。我想以最快的方式连接它们。几何形状为 CGAL 多面体类型。

我知道我可以使用共享内存,但是我遇到了一些问题:

  1. 当我想将几何图形从进程 A 复制到共享内存时,我可以使用流式多面体与 OFF 格式之间的转换,但我对此不感兴趣,因为转换到这种格式对于我的目的来说太慢了。
  2. 我可以创建共享内存并使用“placement new”在共享内存中创建对象并克服流和转换的开销,但随后我无法通过内部 Polyhedron 函数进一步控制内存分配。 (例如,当使用 Polyhedron_incremental_builder_3 添加新顶点时,我无法指定它应该放置在内存中的确切位置 - 我可以只调用 B.add_vertex( Point( 0, 0, 0)); 并在该方法中处理内存分配内部)

有没有什么方法可以在共享内存中的特定位置创建对象并确保它及其动态结构将“生存”在该内存中?

或者也许还有另一种在两个进程之间共享动态数据(即半边结构)的快速方法?


我无法进一步控制内部 Polyhedron 的内存分配 功能。

你实际上确实有控制权。

参考手册说:

Polygon_2 类实现多边形。 Polygon_2 由特征参数化 类和容器类。后者可以是任何满足以下条件的类 STL 容器的要求。默认为向量 班级。

此外对多边形本身使用新的放置,您需要一个可以放置在共享内存中的容器。您可以尝试使用boost::interprocess::vector,或者推出您自己的容器类。

如果你使用boost::interprocess::vector,您需要为其创建一个包装类,因为与 STL 容器不同,它的构造函数需要一个分配器object. Polygon_2将无法正确构建它。因此,您必须从某种全局变量中获取共享内存分配器对象。例如:

using namespace boost::interprocess;
typedef allocator<int, managed_shared_memory::segment_manager>  ShmemAllocator;
ShmemAllocator some_global_shmem_allocator;
template <typename T>
class my_shared_memory_vector : vector<T, ShmemAllocator>
{
public:
  my_shared_memory_vector() : vector(some_global_shmem_allocator) {}
};

免责声明:我自己实际上并没有做过任何这些事情。如果您的计算机因此而着火并且您的房子被烧毁,请不要让我负责。明智的做法是仔细检查(通过查看 GCAL 源代码)是否有任何内存Polygon_2allocates实际上是由容器管理的。

Edit:我误读了这个问题,它问的是多面体,而不是多边形。请参阅下面的评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++ 进程之间共享 CGAL 的几何图形 的相关文章

随机推荐