Qt - Таинственные ошибки в рабочем потоке - PullRequest
2 голосов
/ 27 июля 2011

Я создаю экземпляр QSystemDeviceInfo в рабочем потоке, но он вызывает ошибку segfault.

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

Является ли класс потокобезопасным или проблема кроется в другом месте?

РЕДАКТИРОВАТЬ: При дальнейшей отладке я также заметил, что нативный Symbian также вызывает segfault.

С наилучшими пожеланиями

Ответы [ 2 ]

3 голосов
/ 30 июля 2011

Я и мой друг также обнаружили эту проблему на Symbian Qt Mobilty 1.0. Он сообщил о проблеме QtMobility access из нескольких потоков . Как сказано в описании проблемы Думаю, это может быть связано с тем, что некоторые статические члены создаются при первом создании QSystemDeviceInfo / QSystemNetworkInfo. .

Если вы используете Qt Mobility 1.2 или обращаетесь к QSystemDeviceInfo только из одного потока, это другая проблема.

РЕДАКТИРОВАТЬ: Одним из обходных путей для нас было убедиться, что мы сначала создали объект QSystemDeviceInfo в нашем главном потоке, но затем у нас возникли некоторые проблемы с неполучением всех сигналов.

0 голосов
/ 29 июля 2011

У вас есть установленные возможности?QSystemDeviceInfo требуется возможность «ReadDeviceData». Вам нужно будет подписать свое приложение для установки на устройство, если вы включите эту возможность.

...