Маленькая предыстория. Написали мы совтинку под Meego 1.2 Harmattan, и решили портировать её под Symbian. Немножко повозились с интерфейсом (повозился я, ибо я его и писал), вроде всё запускалось. Потом стало необходимо прилепить логику, но не тут то было. Стало появляется куча магических ошибок, среди них:
1. Зависание при попытке записи данных в сокет.
2. Поток завершился крахом: Thread 0xba2 has panicked. Category: QEventDispatcher; Reason: 0
Были ещё какие-то, но их я не сохранил.
Ах, да, в эмуляторе была ещё одна ошибка: QSocketNotifier: socket notifiers cannot be enabled from another thread
Так как логику писал не я, а исправлять пришлось мне (ну вот так плохо получилось), я очень долго рыл всю эту штуку...
А на выходе всё оказалось скучно и неинтересно.
Все создаваемые объекты (и сам поток в том числе) вам необходимо перенести методом MoveToThreat(QThread *thread).
Вот пример из моего кода:
А вот так я создавал сокет в методе run():
1. Зависание при попытке записи данных в сокет.
2. Поток завершился крахом: Thread 0xba2 has panicked. Category: QEventDispatcher; Reason: 0
Были ещё какие-то, но их я не сохранил.
Ах, да, в эмуляторе была ещё одна ошибка: QSocketNotifier: socket notifiers cannot be enabled from another thread
Так как логику писал не я, а исправлять пришлось мне (ну вот так плохо получилось), я очень долго рыл всю эту штуку...
А на выходе всё оказалось скучно и неинтересно.
Все создаваемые объекты (и сам поток в том числе) вам необходимо перенести методом MoveToThreat(QThread *thread).
Вот пример из моего кода:
mTransport = new CTransport();
connect(this,SIGNAL(PostToTransport(QByteArray)),mTransport,SLOT(Post(QByteArray)));
mTransport->moveToThread(mTransport);
А вот так я создавал сокет в методе run():
mSocket = new QTcpSocket();
mSocket->moveToThread(this);
ИИИ???
ОтветитьУдалить