加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C中的进程之间共享CGAL的几何

发布时间:2020-12-16 07:01:34 所属栏目:百科 来源:网络整理
导读:我正在寻找在流程(C)之间发送CGAL几何的最快方法.让我们假设,我们有2个进程–A和B.进程A生成几何,进程B正在显示它.我想以最快的速度连接它们.几何是CGALs多面体类型. 我知道我可以使用共享内存,但后来我遇到了一些问题: 当我想将几何从进程A复制到共享内存
我正在寻找在流程(C)之间发送CGAL几何的最快方法.让我们假设,我们有2个进程–A和B.进程A生成几何,进程B正在显示它.我想以最快的速度连接它们.几何是CGALs多面体类型.

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

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

有没有办法在共享内存中的特定位置创建对象并确保它及其动态结构将“存活”在此内存中?

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

解决方法

I have no further control of memory allocation by internal Polyhedron
functions.

你确实有控制权.

参考手册说:

The class Polygon_2 implements polygons.
The Polygon_2 is parameterized by a traits
class and a container class. The latter can be any class that fulfills
the requirements for an STL container. It defaults to the vector
class.

除了为多边形本身使用placement new之外,还需要一个可以放在共享内存中的容器.您可以尝试使用boost :: interprocess :: vector,或者滚动您自己的容器类.

如果使用boost :: interprocess :: vector,则需要为它创建一个包装类,因为与STL容器不同,它的构造函数需要一个allocator对象. 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_2分配的任何内存实际上都是由容器管理的.

编辑:我误解了这个问题,它询问了Polyhedra,而不是Polygons.见下面的评论.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读