如何使用自己的全局变量副本创建多个实例

时间:2013-08-05 12:44:14

标签: c++ embedded

我有两个项目:

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

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

    有没有简单的方法来解决我的问题?

3 个答案:

答案 0 :(得分:2)

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

  1. 产生多个进程(每个进程都有自己的全局变量),并建立它们与主程序之间的通信通道。

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

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

答案 1 :(得分:2)

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

  • 剪贴板
  • COM
  • 数据复制
  • DDE
  • 文件映射
  • 邮筒
  • RPC
  • Windows套接字

有关这些内容的详细信息,请参阅here。其他操作系统也有类似的机制。

一个更简单的替代方法是在一个单独的线程中运行每个实例,并将全局变量放在thread local storage中。

但是,在所有情况下,你应该避免使用“很多”,而应该避免任何全局变量。这通常表明设计不佳。请参阅this article了解全局错误的原因以及避免它们的方法。

答案 2 :(得分:0)

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

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

注意:我是在Windows上制作的,但我认为在Unix上可能会有类似的东西。