2011-07-27 23 views
2

我在工作線程上實例化QSystemDeviceInfo,但它會導致段錯誤。Qt - 工作線程上的神祕段錯誤

int BatteryInfo::getLevel() { 
    QSystemDeviceInfo sysDevInfo; //segfault happens when I step on to this line 
    return sysDevInfo.batteryLevel(); 
} 

該類是線程安全的,還是問題在別處?

編輯:隨着進一步調試,我也注意到,本地Symbian調用segfault以及。

問候

+0

你有來自本地調用的恐慌代碼嗎? – James

+0

沒有恐慌。 – Gerstmann

回答

3

我和我的朋友在Symbian Qt Mobilty 1.0上也發現了這個問題。他報告了一個問題QtMobility access from multiple threads。正如它在問題描述中所說的那樣認爲這可能是由於某些靜態成員是在創建QSystemDeviceInfo/QSystemNetworkInfo時第一次創建的。

如果您使用的是Qt Mobility 1.2或者只從一個線程訪問QSystemDeviceInfo,那麼這是另一個問題。

編輯:我們的一個解決方法是確保我們在我們的主線程中首先創建了一個QSystemDeviceInfo對象,但之後我們遇到了一些無法獲取所有信號的問題。

+0

我使用移動性1.1,所以這似乎是問題所在。 – Gerstmann

0

你有能力設定? QSystemDeviceInfo需要'ReadDeviceData'功能。如果包含此功能,您需要簽署應用才能在設備上進行安裝。

+0

我有能力集。沒有線程,這些調用就可以正常工作。我也已經簽署了應用程序。 – Gerstmann

+1

我有一個與QtContacts類似的問題。嘗試在主線程的堆中初始化QSystemDeviceInfo,然後嘗試在工作線程中使用它。 – Abhijith