【问题标题】:modular c++ application design and shm shared memory模块化 c++ 应用程序设计和 shm 共享内存
【发布时间】:2018-11-09 09:56:37
【问题描述】:

我需要重构一个工业流程应用程序,以便非常容易地模块化/可定制。

此应用程序将使用模块/插件。 每个模块都包含一个可用于驱动一个单元的函数(想象它像一台 3D 打印机,我有 XY 单元、头部加热单元、送丝单元……)。但我的应用程序真的比这更大......

这些插件中的每一个都必须通过系统中的共享内存区域共享数据资源(用于 gui 进程)

我需要找到一种方法来共享系统共享内存区域内某些类的数据(POD 数据)。

挑战在于找到一种以最简单的方式实现它的方法。 模板、命名空间...或其他 c++17 功能可能会受到欢迎。 它可能涉及对现有应用程序的完整思考/重构。 目前,这意味着我有一个包含数据结构的类:

typedef struct mydata {
   int data1;
   float data2;
} T_mydata; 


struct{
   // some data ...
   ...
   // ptr to class struct data 
   T_mydata a_ptr;
   // some other data ...
}
*shmptr;

class A {
T_mydata *data_ptr; // will point *shmptr->a_ptr;
... 
};

【问题讨论】:

  • 共享内存是硬性要求吗? (如果是,那为什么?-因为如果是这样,您将自己置于更困难的道路上)另外,其他模块/插件是否也在 c++ 中,或者它们可以是某些语言吗?
  • 这是一个硬实时自动化过程,模块也是c++语言。共享内存是必需的,这些数据用于进程监督和非实时用户空间,(例如实时电机位置、进程(模块)状态、....从用户空间界面发出的设置模式)....跨度>
  • 你没有回答我的语言问题..而且你的目标是什么类型的模块/插件真的不清楚 - 例如会在 .dll 中工作,等等 ??。我正在标记关闭。
  • 模块/插件将是 c++ 类/方法。就解决方案而言,可能是我目前不知道的dll。这将取决于实现它的方式。
  • 目前还不清楚您的问题是什么。既然您谈论共享数据,它就意味着某种多线程或多处理范例。

标签: c++ stl c++17


【解决方案1】:

为了实现共享内存、通信等。boost::interprocess 库有简单实用的工具,也有相当复杂的概念。

【讨论】:

    猜你喜欢
    • 2011-01-07
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多