1

我有两个项目:

  1. 嵌入式一个,用 C++ 编写,使用大量静态/全局变量。
  2. 第二个,在PC上运行并使用与嵌入式相同的源代码。

它工作得很好。

但是现在第二个项目应该运行多个嵌入式项目实例。此外,每个实例都应该有自己的静态/全局变量副本,并且我应该能够在一个程序范围内与每个实例进行交互。我不知道如何使用所有静态/全局变量来做到这一点。

有什么简单的方法可以解决我的问题吗?

4

3 回答 3

2

运行两个独立的进程并使用某种形式的 IPC 在进程之间进行通信。在 Windows 中可用的 IPC 机制包括:

  • 剪贴板
  • 通讯
  • 数据复制
  • DDE
  • 文件映射
  • 邮槽
  • 管道
  • RPC
  • Windows 套接字

有关每一项的详细信息,请参见此处。其他操作系统中也有类似的机制。

一个可能更简单的替代方法是在单独的线程中运行每个实例,并将全局变量放在线程本地存储中。

但是,在所有情况下,您都应该避免仅“很多”但任何全局变量。它通常表示设计不佳。请参阅这篇文章,了解为什么全局变量不好,以及避免它们的方法。

于 2013-08-05T16:13:38.463 回答
2

有几种方法可以解决这个问题:

  1. 生成多个进程(每个进程都有自己的一组全局变量)并设置它们与主程序之间的通信通道。

  2. 摆脱全局变量。最简单的方法是将它们全部转储到一个类中(作为非静态成员)并使用该类的实例来访问每组变量。

无论哪种方式,如果你有大量的全局变量,这都不是一个小问题。

于 2013-08-05T13:13:08.367 回答
0

正如其他答案所述,最好的解决方案是摆脱全局变量,但我知道这并不总是可行的。我在我们的代码库中遇到了完全相同的问题。

我使用的解决方案是将每个实例构建为单独的 DLL。然后加载我LoadLibrary()在运行时加载的每个 DLL。通过这种方式,您可以让所有内容在单个进程中运行,并拥有相同全局变量和单例的多个版本。然后您不需要使用任何 IPC,但可以通过简单的函数调用在实例之间传递数据。它还使调试更容易,因为您可以在一个调试器中查看所有内容。

注意:我是在 Windows 上完成的,但我认为在 Unix 上也可以做到类似的事情。

于 2013-08-11T11:33:47.993 回答