999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于MFC的Vega Prime場景漫游驅動框架的設計

2013-01-18 12:03:58王建華
電子設計工程 2013年2期
關鍵詞:進程

趙 月,王建華

(江蘇科技大學 電子信息學院,江蘇 鎮江 212003)

虛擬漫游是在真實場景或虛擬場景中,借助必要的裝備以自然的方式在該場景中進行漫游,從任意角度對環境中虛擬對象進行觀察,從而產生身臨其境的感覺,同時也可以對其中的物體進行規劃和操作。

文中是為了實現在實時仿真系統虛擬環境中的漫游,建立視景驅動框架實現實時驅動虛擬場景的變化。Vega Prime(VP)提供多種開發模式[1],一是使用 VP的 Lynx Prime圖形界面,適合簡單交互性不高的小系統;二是運用VP的API函數進行的開發,通過C++編程,調用VP的API函數實現對視景的驅動,可以開發較復雜的系統;三是結合前兩種模式進行的全面開發,首先通過Lynx Prime用戶界面建立acf文件,再將VP的API函數與已經配置完成的acf文件進行結合。文中采用第3種模式,可以大幅減少源代碼開發時間,降低對開發人員要求,這是也最常用的開發模式。

鑒于MFC的開發框架有著友好的交互界面和消息驅動機制,本文詳細介紹了在MFC框架下開發基于Vega Prime視景驅動程序的方法。

1 建立基于MFC的VP視景驅動程序

實現虛擬場景的漫游,首先需要解決的是三維視景實時驅動,在Windows平臺上進行VP開發,采用VC++編程。MFC基于文檔/視圖結構的應用程序框架結構是開發Windows應用程序的主要框架結構。文檔對象用于保存應用程序的數據,視圖對象用于數據的顯示和用戶的交互[2]。兩種結構聯系又獨立,分工明確,簡化了開發過程

MFC提供多線程應用程序編程[3],包括用戶界面線程UI(User Interface)和工作者線程,兩種線程區別于UI線程有消息循環功能,工作者線程沒有。UI線程既是MFC的主線程,進行創建窗口并處理發送到該窗口的消息,作為主要仿真界面,負責開啟VP線程、終止VP線程等,控制VP仿真過程。相對UI線程外的其它線程是工作者線程。在MFC下實現VP程序,即創建一工作者線程,在線程主函數里調用VP初始化函數和執行主循環。系統框架如圖1所示。

圖1 系統框架Fig.1 System framework

基于MFC的VP窗口顯示包含了MFC和VP窗口。MFC窗口應作為VP窗口的父窗口,配置過程中將要利用VP中vr Window 類提供的 setParent(Window win)函數[4],將 MFC 的視圖類CView窗口句柄m_hWnd傳遞到vpWindow窗口即可。

假設基于MFC的VP項目名稱為MFCVP。

VP工作線程控制函數主要代碼如下:

啟動VP工作線程主要代碼:

中止VP工作線程,在UI線程結束之前,應先結束VP工作線程。因為VP是基于多線程的,若直接退出主線程會引發異常。

//中止VP工作線程主要代碼:

2 MFC框架下VP的問題分析及解決

MFC類庫編程環境下調用VP基本采用如下的方法:

首先單獨創建一工作線程運行VP整個程序流程,包括初始化、定義、配置、仿真循環。然后在MFC框架視圖類中添加成員函數負責開啟線程。再利用API函數AfxBeginThread()開啟VP線程[5],并將該視圖類的指針傳到VP線程中,作為線程函數的輸入參數,這樣使得文檔類和視圖類的公有成員變量在VP線程中可以被方便的讀寫,編程的靈活性得到了提高。

但這樣的方案卻存在著問題,因為視圖類(CView)的指針被傳送到主線程之外其它線程中去,使得不同線程在運行時可以訪問到相同的CView類實例,而MFC類庫本身設計并沒有考慮到多線程的訪問,所以在線程間傳遞視圖類(CView)是不安全的。

2.1 在VP線程中更新視圖時訪問保護異常錯誤的研究

在實際開發應用中,在不退出當前應用程序前提下進行更新視圖會出現錯誤。VP線程在沒有退出的情況下進行重新配置將導致失敗,那么終止正在運行的線程,然后再重新開啟一新的線程,在初始化VP階段時,VP也會出現地址訪問保護錯誤。

下面分析錯誤產生的原因[6],基于MFC的VP應用程序在配置中要利用VP中vrWindow類提供的void setParent(Window win)函數,將MFC的Windows窗口句柄m_hWnd傳遞給VP作為其父窗口。由此可以判斷出,基于MFC的VP應用程序實質上是將VP渲染放入到MFC的View窗口中進行的。

VP由于是基于多線程的,所以在初始化過程中會自動開啟一個VP窗口子線程。該子線程會根據傳送的窗口句柄去創建一個與該句柄對應的窗口有相同大小的窗口,附在該窗口上。在用戶終止VP線程時,該窗口線程不會自動中止,而且也沒給用戶提供終止函數。再次啟動VP線程,進行初始化時,不會啟動新的VP窗口線程,任保留原來沒有被終止的窗口線程。這樣就會導致再次啟動VP線程時會出現地址保護錯誤。因此,終止VP線程也不能實現場景切換。

2.2 基于進程的場景切換方法

首先分別創建兩個進程,VP進程和MFC主進程。就是將同一個應用程序中的不同部分進行相互黑箱化[7],彼此之間僅通過定義好的接口進行訪問,這就最大限度地減小各部分之間的相互影響。

然后在此基礎上對Vega Prime場景中對實例的驅動,包括初始化、定義、配置、仿真循環和退出等操作封裝成一個類,對特效模塊如碰撞等效果封裝成一個類,各類功能互不干擾,程序互相訪問調用。

最后解決VP進程和MFC主進程之間快速有效地進行通信問題。

因為在VP進程和MFC主進程間除了要傳遞大量的視景驅動數據外,還要進行一些控制信息的傳遞,鑒于實現的快捷性、進程通信速度上的性能要求以及便與功能的擴展等方面的綜合考慮,采用內存映射文件的方式。

本文通過共享內存實現進程間的數據交換,利用windows消息機制實現進程間的同步,兩種機制結合使用,不僅解決了交換數據量小的問題,還解決了進程并發存取數據的問題。

3 同機進程間內存映射的實現

從使用者的角度看,數據共享方法是通過讓兩個或多個進程映射同一文件映射對象的視圖來實現的,這意味著他們將共享磁盤上同一文件或者物理存儲器的同一頁面。因此,當一個進程將數據寫入一個共享文件映射對象的視圖時,其它進程可以立即看到它們視圖中的數據變更情況。通過上述操作,用戶操作文件就能夠達到操作內存一樣的效率,多個進程操作該映射文件實現進程間內存一級的高速數據交互。部分實現如下:

//創建文件內核對象,其句柄保存于m_hFileSave

HANDLE m_hFileSave=CreateFile(m_FileName(保存文件 ), GENERIC_READ |GENERIC_WRITE, 0, NULL,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL)

//以實際數據長度創建另外一個文件映射內核對象

m_hMapSave=CreateFileMapping (m_hFileSave, NULL,PAGE_READWRITE, 0, ((DWORD) qwFileOffset&0xffffffff)*sizeof(DWORD)); NULL);

//關閉文件內核對象

CloseHandle (m_hFileSave);

//將文件數據映射到進程的地址空間

IMapAddressSave = (PDWORD) MapViewOfFile(m_hMapSave, FILE_MAP_ALL_ACCESS, 0, 0,qwFileOffset*sizeof(DWO

RD));

//將數據從原來的內存映射文件復制到此內存映射文件

Memcpy (lpbMapAddressSave, lpbMapAddress,qwFileOffset*sizeof(DWORD));

//從進程的地址空間撤銷文件數據映象

UnmapViewOfFile (lpbMapAddress); UnmapViewOfFile(lpbMapAddressSave);

//關閉文件映射對象 CloseHandle(m_hMap);

CloseHandle (m_hMapSave);

//刪除臨時文件

DeleteFile (m_FileName);

4 多場景仿真系統進程的實現

根據上文提出的方法,對于多進程仿真系統中實現多場景的驅動框圖如圖2所示,其中圖中省略了VP進程部分對實例驅動和特效模塊用不同的類進行封裝的結構圖。圖2中顯示了兩個進程間實現的流程圖。進程間采用內存文件映射和消息機制進行數據通信,MFC主進程負責創建終止VP仿真進程。

圖2 MFC與VP進程間通信流程圖Fig.2 Communication flow chart between MFCand VPprocesses

5 結 論

文中介紹了虛擬場景中漫游驅動的實現,在基于MFC的Vega Prime框架的設計,具體分析了多場景切換中遇到的問題,從面向對象的角度,提出了較為全面和穩定的解決方法。此方法可以滿足多場景的數據共享和快速通信,具有廣泛的通用性和實用性。

[1]張波,丁瑩.基于Vega Prime的視景仿真系統的研究[C]//第六屆全國仿真器學術會議,2007:261-265.

[2]車忠志,孫雪雁.MFC應用程序基本框架分析[J].農業網絡信息,2010,29(9):154-147.CHE Zhong-zhi,SUN Xue-yan.The analysis of MFC application framework[J].Agriculture Network Information,2010,29(9):154-147.

[3]王嬌艷,康鳳舉.MFC框架下多通道視景仿真技術[J].火力與指揮控制,2010,35(7):130-132.WANG Jiao-yan,KANG Feng-ju.Research on multi-channel based on Vega Prime under MFC framework[J].Fire Control&Command Control,2010,35(7):130-132.

[4]劉淑霞,范雄飛,孟艷.基于MFC的Vega Prime程序框架研究 [C]//系統仿真技術及其應用學術會議論文集,2009:418-421.

[5]胡梓楠,于勁松.基于MFC框架的Vega Prime軟件集成技術的研究[J].系統仿真學報,2007,21(14):4291-4295.HU Zi-nan,YU Jin-song.The research on the framework of vegaprime software integration technology based on MFC[J].Journal Of System Simulation,2007,21(14):4291-4295.

[6]孫科峰,李潔.基于Vega Prime的多場景仿真系統框架[J].計算機仿真,2007,24(12):193-196.SUN Ke-feng,LI Jie.Vrious scense renging system frame based on Vega prime[J].Computer simulation,2007,24(12):193-196.

[7]李軍,王邵棣,常建剛,等.基于Vega的視景驅動軟件的分析與設計[J].系統仿真學報,2003,15(3):397-401.LI Jun,WANG Shao-di,CHANG Jian-gang,et al.Aalysis and design of renging software based on Vega[J].Journal of System Smulation,2003,15(3):397-401.

猜你喜歡
進程
債券市場對外開放的進程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
改革開放進程中的國際收支統計
中國外匯(2019年8期)2019-07-13 06:01:06
快速殺掉頑固進程
社會進程中的新聞學探尋
民主與科學(2014年3期)2014-02-28 11:23:03
我國高等教育改革進程與反思
教育與職業(2014年7期)2014-01-21 02:35:04
Linux僵死進程的產生與避免
講效率 結束進程要批量
電腦迷(2012年24期)2012-04-29 00:44:03
男女平等進程中出現的新矛盾和新問題
俄羅斯現代化進程的阻礙
論文萊的民族獨立進程
主站蜘蛛池模板: 国产成人高精品免费视频| 青青青伊人色综合久久| 国产69囗曝护士吞精在线视频 | 波多野结衣中文字幕一区| 免费人欧美成又黄又爽的视频| 18禁黄无遮挡免费动漫网站| 国产欧美亚洲精品第3页在线| 国产成人一二三| 亚洲无码91视频| 日韩av高清无码一区二区三区| 亚洲色成人www在线观看| 国产成人乱无码视频| 亚洲天堂精品视频| 欧美激情视频一区| 欧美啪啪精品| 亚洲天堂在线免费| 成人小视频网| 国产精品三级专区| 毛片基地视频| 毛片最新网址| 亚洲欧美日本国产综合在线 | 青青草原国产av福利网站| 伊人精品成人久久综合| 在线亚洲精品自拍| 久久久久久久蜜桃| 亚洲视频二| 欧美一级夜夜爽www| 亚洲精品午夜天堂网页| 亚洲欧美另类日本| 在线亚洲精品福利网址导航| 国产精品yjizz视频网一二区| a毛片在线| 亚洲h视频在线| 无码国内精品人妻少妇蜜桃视频| 久久久噜噜噜久久中文字幕色伊伊 | 久久这里只精品热免费99| 亚洲日韩国产精品综合在线观看 | 一级黄色欧美| 色综合五月婷婷| 狠狠色综合网| 人人91人人澡人人妻人人爽| 最新精品国偷自产在线| 国产精品久久久久鬼色| 九九热精品在线视频| 国产国产人成免费视频77777| 免费午夜无码18禁无码影院| 亚洲人妖在线| YW尤物AV无码国产在线观看| 免费毛片网站在线观看| 99爱在线| 老司机午夜精品网站在线观看 | 动漫精品中文字幕无码| 99热这里只有精品国产99| 欧美色综合网站| 看国产毛片| 视频国产精品丝袜第一页| 午夜三级在线| 在线观看国产小视频| 日韩激情成人| 国产交换配偶在线视频| 国产高清在线观看91精品| 麻豆国产精品一二三在线观看| 热久久综合这里只有精品电影| 国产激情无码一区二区APP| 亚洲精品777| 一区二区欧美日韩高清免费| 国产欧美日韩资源在线观看| 青青极品在线| 久久人与动人物A级毛片| 91久久精品日日躁夜夜躁欧美| 亚洲国产综合精品中文第一| 中字无码av在线电影| 久久国语对白| 久久午夜夜伦鲁鲁片不卡| 九九线精品视频在线观看| 久久香蕉国产线看观| 国产精品页| 久热re国产手机在线观看| 国产91精品久久| 亚洲国产成人超福利久久精品| 老司机精品久久| 3D动漫精品啪啪一区二区下载|