簡體   English   中英

如何使用自己的全局變量副本創建多個實例

[英]How to create more than one instance with own copy of global variables

我有兩個項目:

  1. 嵌入式的,用C ++編寫,使用大量的靜態/全局變量。
  2. 第二個,在PC上運行並使用與嵌入式源代碼相同的源代碼。

它工作得很好。

但是現在第二個項目應該運行多個嵌入式項目實例。 此外,每個實例都應該有自己的靜態/全局變量副本,我應該能夠在一個程序范圍內與每個實例進行交互。 我不知道如何使用所有靜態/全局變量執行此操作。

有沒有簡單的方法來解決我的問題?

有幾種方法可以解決這個問題:

  1. 產生多個進程(每個進程都有自己的全局變量)和它們與主程序之間的通信設置通道。

  2. 擺脫全局變量。 最簡單的方法是將它們全部轉儲到類中(作為非靜態成員),並使用該類的實例來訪問每組變量。

無論哪種方式,如果你有大量的全局變量,這不是一個小問題。

運行兩個單獨的進程並使用某種形式的IPC在進程之間進行通信。 在Windows中,IPC可用的機制包括:

  • 剪貼板
  • COM
  • 數據復制
  • DDE
  • 文件映射
  • 郵筒
  • 管道
  • RPC
  • Windows套接字

有關這些內容的詳細信息,請參見此處 其他操作系統中也有類似的機制。

一個更簡單的替代方法是在單獨的線程中運行每個實例,並將全局變量放在線程本地存儲中

但是,在所有情況下,你應該避免使用“很多”而不是任何全局變量。 這通常表明設計不佳。 請參閱這篇文章,了解為什么全局變量是壞的,以及避免它們的方法。

正如其他答案所述,最好的解決方案是擺脫全局變量,但我知道這並不總是可行的。 我遇到了與我們的代碼庫完全相同的問題。

我使用的解決方案是將每個實例構建為單獨的DLL。 然后加載我在運行時使用LoadLibrary()加載每個DLL。 通過這種方式,您可以在一個進程中運行所有內容,並擁有相同全局變量和單例的多個版本。 然后您不需要使用任何IPC,但可以通過簡單的函數調用在實例之間傳遞數據。 它還使調試更容易,因為您可以在一個調試器中看到所有內容。

注意:我是在Windows上制作的,但我認為在Unix上可能有類似的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM