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