程序中一些和多線程有關的問題

mfc框架的osg程序中的osg線程是被定義成靜態的,用起來很麻煩,因爲靜態的函數不能直接訪問非靜態的變量,要通過具體的對象引用。當初不知道爲什麼,所以想把static給去掉變成非靜態的,後面找到了另外一個方法,通過另外一個函數去訪問這些非靜態變量,然後靜態函數訪問這個函數,這樣就方便了很多。今天才知道爲什麼osg線程要定義成靜態的,原來是有原因的:線程函數在Visual C++/Visual Studio環境下幾個特點。線程函數不能以某個類的普通成員函數出現,會有編譯錯。基於這樣一個緣故,線程函數可以寫成某個類的靜態成員函數或者全局函數,當然如果寫成了全局函數,csdn上的一些朋友又要說你違背OO了,所以就用static。

然後就是一個很容易被忽略的問題,gui線程。我們記得多線程使用同一個變量的時候要給這個變量上鎖,但我們經常忽略了這個gui線程。所以當GUI線程中要對另一個線程中的變量進行修改時一不小心程序就奔潰了,而且沒有具體的錯誤類型提示,讓人一頭霧水。所以這時不要忘了在可能發生衝突的區域給這個變量加一個臨界區!防止這個線程在使用這個變量時,剛好點擊了gui中的菜單啊什麼之類的,然後程序就奔潰了,,,,,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章