【发布时间】:2013-02-24 00:56:08
【问题描述】:
我正在编写 IPC 的实现。用户调用,我将所有这些参数传递给其他进程。
我已经为这些函数编写了一个基于逻辑的自动代码生成器,其工作原理如下:
- 获取所有参数并将它们放入结构中。
- 添加 IPC 所需的其他信息。将此结构的大小和指针传递给 POSIX 消息队列。 从这个地址读取数据,直到指定的大小,然后发送到其他进程。
- 解构结构以获取参数。
- 使用这些参数调用实际函数。
当我只有普通的旧数据类型时,这非常有效。但是当函数参数是非 POD 时,我的逻辑失败了,因为:
- 在非 POD 类型的情况下,我无法确定总数据的大小[消息队列需要]
- 某些类可能包含动态增加的实体,例如向量。
有人可以告诉我如何处理这种情况吗?
【问题讨论】:
-
我写了这个。 github.com/Loki-Astari/ThorsSerializer 它将 C++ 对象序列化为 Json(并反序列化它们)。不如 Google 的东西好,但使用起来非常简单。
-
@JoachimPileborg 我阅读了有关 Boost 序列化的信息。据我了解,数据被序列化成文件,然后反序列化。但是这个数据是写在硬盘上的!就速度而言,访问硬盘传输数据,对于 IPC 机制来说,这不是太多开销吗?
-
Boost Serialization 中现有的归档类支持任何流,因此可以用于任何 C++ iostream(例如Boost ASIO
ip::tcp::iostream)。
标签: c++ c ipc message-queue dbus