WW多线程和锁
問題:
WorldWind中是雙線程的,一直忽略了多線程中數據共享,修改數據會產生問題。可是在WW中并沒有看到鎖的東西。
還有就是動態釋放內存的問題。因為采用D3D的C#封裝庫不可避免涉及COM對象的釋放問題,是否會導致內存溢出的問題。
一點分析:
在Update方法中,首先判斷渲染對象是否初始化成功?isInitialized,沒有成功就初始化數據,初始化主要負責構建頂點數組和索引數組,以及頂點緩存等,接著就將isInitialized設置為true。
雖然執行Update的同時,主線程也在調用Render方法,但是如果isInitialized==false,不會執行渲染的操作。也就是說沒有造成初始化過程中構造的頂點緩存的沖突。如果需要重新初始化頂點緩存,只需要將isInitialized設置為false。
Update線程和Render主線程氏競態的。
但是如果沒有首先從對象渲染列表中移除渲染對象就調用Dispose方法釋放VextexBuffer就會出現問題。
即使Dispose之前將isInitialized設置為false,這樣仍保不準Update線程調用Initialize()方法后將isInitialized又設置為true。
總結
- 上一篇: 在jsp页面利用Ajax动态显示数据库中
- 下一篇: linux中下载文件的命令