【问题标题】:Methods of sharing class instances between processes在进程之间共享类实例的方法
【发布时间】:2009-02-24 13:41:50
【问题描述】:

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

最初我研究了#pragma data_seg,但当我意识到它不适用于类或任何在堆上分配的东西时,我感到很失望。

类的实例必须可以通过 dll 访问,因为现有的完整应用程序已经使用此 dll。

【问题讨论】:

    标签: c++ dll process share


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      查看Boost::interprocess。这需要一点时间来适应,但效果很好。我在共享内存中创建了相对复杂的数据结构,可以在进程之间正常工作。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 2020-12-05
            • 1970-01-01
            • 1970-01-01
            • 2011-09-02
            • 1970-01-01
            • 2019-05-07
            • 1970-01-01
            • 2013-05-07
            • 1970-01-01
            相关资源
            最近更新 更多