本站小編為你精心準備了圖形顯示與炮兵作戰模擬系統間接口實現參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
摘要:為了實現圖形顯示模塊與炮兵作戰模擬系統其他模塊間的通信,本文通過接口技術來解決作戰態勢的數據表示與模擬的同步,并利用共享文件和共享內存區的方法實現數據傳遞。關鍵詞:圖形;接口;模擬隨著炮兵作戰模擬系統模擬的內容越來越多,朝著多機聯網、分布式處理的方向發展,將圖形顯示分系統設計成一個獨立的、通用的模塊是很有必要的,但必須解決好圖形顯示分系統與其他模塊的接口。1接口作用接口主要解決兩個問題:作戰態勢的數據表示與模擬的同步。作戰態勢主要由下面的情況組成:一定區域的背景地圖及地物、各參戰單元的屬性及動作、交戰關系及作戰效能區、播放附加媒體及聲音效果。這些態勢可由一種統一的數據結構表示,形成一種情況對應一種命令。命令由多個字段組成。圖形模塊接收到一組顯示命令后,通過內部解釋程序把命令轉為作戰態勢的顯示。模擬的同步是指模型機產生一組顯示命令之后,只有圖形機接收之后,模型機才能產生下一組顯示命令,是兩個執行進程問的一種互相等待的同步控制機制。例如通過網絡共享文件實現命令的傳送,專門設置一個信號數據,用來標志可寫還是可讀。當模型機接到“可寫”后,寫出一條命令,設置“可讀”。圖形機接到“可讀”后,讀入一條命令。設置“可寫”。這樣即實現了兩個模塊之間的同步控制機制。實際上,模塊之間接口的關鍵是解決其間通信程序的編寫。根據圖形模塊與其控制模塊之間的位置差異,通信的方法也有所不同。2接口實現方法模塊間通信屬于不同進程間的通信。通常有兩大方式:共享系統資源與通過操作系統來收發消息。在圖形模塊與其他模塊的接口編程中。更多的是傳遞數據,而并非常用的消息。即便是需要用到傳遞消息,也可以用約定的數據來代替。故在此重點討論用共享系統資源的方式進行模塊間的通信。2.1共享文件的方法對于共享系統資源而言,可分為共享硬盤文件(如共享數據庫,共享INI型文件,共享文本文件等)和共享內存(如共享內存映射文件,共享動態連接庫控制的內存,共享串口緩沖區等)等不同方式。在一般性的,對實時性要求不高,數據交換不太頻繁的進程通信中,可以借助于共享硬盤文件來實現。這種方法有編寫簡單,調試容易直觀,適用各種編程語言的優點。最簡單的可用文件是文本文件,各種編程語言對它都有很好的支持。與它類似的是二進制文件,除了后者不可直接查看內容外,后者的操作速度也要好一些。當程序已經用到數據庫時,此時只需多建一個表就能方便地用數據庫來實現資源共享。INI型文件的本來用途是為程序初始化時提供參數,但我們仍可以用它作為共享文件。它操作界面最為友好,可以設定項目分組,可以指定各種數據類型,而不是局限于字符型,對空格、分行沒有限制,文件可以在外部方便地查看與修改。其一般步驟是:控制模塊把要傳出的信息寫到文件中,并同時寫上一個讀寫標志;圖形模塊一直在監視讀寫標志,當得到可讀標志后。才把信息文本讀入。另一種辦法是不設置可讀標志,而讓圖形模塊監視通信文件是否作了改動。如果是,則完整地把通信文件讀入;如果否,則作忽略處理。相對來說,后一種辦法更好一些。圖形模塊監視動作也可有兩種選擇:其一是在主線程中對文件作以監視,其特點是簡單;其二是另建一個輔助線程對文件作以監視,其特點是高效。2.2共享內存區的方法共享內存是另一種常用的進程通信方式。它的突出優點是非常高效,在數據交換或讀寫頻繁的場合,用共享硬盤文件的方法在速度上就不合要求,而操作內存則不會有此限制。常用的方法是共享動態連接庫的可共享內存和共享內存映射文件。(1)共享動態連接庫多個進程都可以對該共享數據的動態連接庫進行數據操作,達到共享數據的目的。共享內存的動態連接庫的創建與一般的動態連接庫的創建沒有很大區別。其不同之處在于在頭文件中聲明一個有名字的數據段;建立一個DEF型文件,在文件中對需共享的數據部分作出顯式聲明。因為在默認情況下,動態連接庫中的數據對各個使用它的進程來說是互相獨立的。(2)共享內存映射文件利用內存映射文件實現WIN32進程間的通訊。允許我們在WIN32進程中保留一段內存區域,把目標文件映射到這段虛擬內存中。在程序實現中必須考慮各進程之間的同步。具體實現步驟如下:首先我們在發送數據的進程中需要通過調用內存映射API函數Cre-ateFileMapping()創建一個有名的共享內存,并返回一個HANDLE對象。在創建文件映射對象后可以調用MapViewOfFile()函數映射到本進程的地址空間內。此時,獲得一個指針,用memset()向此指針分配一定大小的內存區。其他進程訪問共享對象,需要獲得共享內存的名字并調用OpenFileMapping()函數。之后,可以像創建進程那樣調用MapViewOfFile函數來映射對象視圖,用戶可以使用該對象視圖來進行數據讀寫操作,以達到數據通訊的目的。當雙方用戶進程結束使用共享內存后,都需要調用Un-mapViewOfFile()函數以取消其地址空間內的視圖,調用CloseHan-dle()取消HANDLE對象。并對自己開辟的內存區用delete()函數作以銷毀。若把內存映射文件的過程作成一個動態連接庫,則以后就可以在非C++的語言中輕易應用。綜上所述:處理好接口問題是炮兵作戰模擬系統中應用圖形顯示模塊的關鍵。進程間的通信是處理接口的基礎。為了直觀,可通過數據庫等進行數據傳遞;為了高效,可通過內存區進行數據傳遞。