代码之家  ›  专栏  ›  技术社区  ›  CiscoIPPhone

在进程之间共享类实例的方法

  •  2
  • CiscoIPPhone  · 技术社区  · 17 年前

    我编写了一个C++类,我需要在至少两个windows进程之间共享一个的实例。有哪些不同的方法可以做到这一点?

    起初我看 #pragma data_seg 当我意识到它在类或堆上分配的任何东西上都不起作用时,我很失望。

    4 回复  |  直到 17 年前
        1
  •  4
  •   Anton Gogolev    17 年前

    您可能会使用 memory-mapped files 在进程之间共享数据。如果你需要调用对象上的函数,你必须使用COM或类似的东西,或者你必须实现自己的RPC协议。

        2
  •  4
  •   Jason S    17 年前

    调查 Boost::interprocess 这需要一点时间来适应,但效果很好。我在共享内存中创建了相对复杂的数据结构,这些结构在进程之间运行良好。

    编辑:它也适用于内存映射文件。关键是你可以以结构化的方式使用数据;您不必将内存块(在文件或共享内存中)视为原始数据,必须仔细读/写才能保持有效状态。Boost::进程间处理这部分,您可以使用树、列表等STL容器。

        3
  •  1
  •   Marc    17 年前

    您可以使用placement new在共享内存区域中创建对象。只要对象不使用任何指针,那就没问题。

        4
  •  0
  •   dirkgently    17 年前

    它是POD还是需要能够跨流程共享单个实例?您是否考虑过使用Singleton模式(静态初始化版本,出于线程安全原因)?您还需要使用互斥体来保护并发写入和其他内容。

    在Windows上,您也可以使用COM。