Форум вопросов и ответов

Форум вопросов и ответов (https://www.otvetnemail.ru/)
-   Продолжение старого архива (https://www.otvetnemail.ru/prodolzhenie-starogo-arhiva-804/)
-   -   [РЕШЕНО] QNetworkAccessManager: неверная работа с тредами валит приложение (https://www.otvetnemail.ru/prodolzhenie-starogo-arhiva-804/resheno-qnetworkaccessmanager-nevernaya-rabota-s-tredami-valit-prilozhenie-357025/)

Guest 30.09.2011 18:22

[РЕШЕНО] QNetworkAccessManager: неверная работа с тредами валит приложение
 
Есть следующее (псевдо-код):КодCclass RequestMaker: public QObject{ Q_OBJECT private: QNetworkAccessManager mgr_; public: RequestMaker(QObject* parent) : QObject(parent), mgr_(this) { connect(&mgr_, SIGNAL(finished(QNetworkReply*)), this, SLOT(networkReplyReceived(QNetworkReply* ))); } void sendRequest(...) { // compose request mgr_.post(...); } public signals: void responseReceived(Response*); private slots: void networkReplyReceived(QNetworkReply* reply) { // convert reply to a special struct Response* resp = ResponseMaker::make(reply); emit responseReceived(resp); reply->deleteLater(); }};Данный класс используется в MainWindow: public QMainWindow, устанавливая слот на responseReceived(). Выполняет sendRequest() и в слоте responseReceived() делает widget.update(). После чего seg. fault.Подозреваю, что слот выполняет в другом треде, и из-за этого такое поведение. Как заставить нормально отрабатывать данный сценарий с данным кодом? Может в каком-то месте надо сделать moveToThread() ?Спасибо.


Часовой пояс GMT, время: 01:21.


© www.otvetnemail.ru - Форум вопросов и ответов.