我有两个项目:
效果很好。
但是现在第二个项目应该运行多个嵌入式项目实例。此外,每个实例都应该有自己的静态/全局变量副本,我应该能够在一个程序范围内与每个实例进行交互。我不知道如何使用所有静态/全局变量来执行此操作。
有没有简单的方法来解决我的问题?
答案 0 :(得分:2)
有几种方法可以解决这个问题:
产生多个进程(每个进程都有自己的全局变量),并建立它们与主程序之间的通信通道。
摆脱全局变量。最简单的方法是将它们全部转储到类中(作为非静态成员),并使用该类的实例访问每组变量。
无论哪种方式,如果你有大量的全局变量,这不是一个小问题。
答案 1 :(得分:2)
运行两个独立的进程并使用某种形式的IPC在进程之间进行通信。在Windows中,可用的IPC机制包括:
有关这些内容的详细信息,请参阅here。其他操作系统也有类似的机制。
一个更简单的替代方法是在一个单独的线程中运行每个实例,并将全局变量放在thread local storage中。
但是,在所有情况下,你应该避免使用“很多”,而应该避免任何全局变量。这通常表明设计不佳。请参阅this article了解全局错误的原因以及避免它们的方法。
答案 2 :(得分:0)
正如其他答案所述,最好的解决方案是摆脱全局变量,但我知道这并不总是可行的。 我遇到了与我们的代码库完全相同的问题。
我使用的解决方案是将每个实例构建为单独的DLL。
然后加载我在运行时用LoadLibrary()
加载每个DLL。
通过这种方式,您可以在一个进程中运行所有内容,并拥有相同全局变量和单例的多个版本。
然后你不需要使用任何IPC,但可以通过简单的函数调用在实例之间传递数据。它还使调试更容易,因为您可以在一个调试器中看到所有内容。
注意:我是在Windows上制作的,但我认为在Unix上可能会有类似的东西。