Название: QNetworkAccessManager заблокировать поток до получения ответа Отправлено: crashtua от Август 22, 2012, 11:47 Как при работе с QNetworkAccessManager заблокировать поток при запросе? Что бы при вызове
Код поток, в котором мы его вызвали, заблокировался... Название: Re: QNetworkAccessManager заблокировать поток до получения ответа Отправлено: crashtua от Август 22, 2012, 11:51 А то вызывать в цикле
Код как то не кошерно... Название: Re: QNetworkAccessManager заблокировать поток до получения ответа Отправлено: Bepec от Август 22, 2012, 12:01 Сам недавно попал в ловушку желания сделать его вызов синхронным. Но через некое время глаза открылись и понял, что тут мешала не асинхронность, а плохое проектирование :D
PS по идее да - только выявляя финишед. Название: Re: QNetworkAccessManager заблокировать поток до получения ответа Отправлено: QtCoder от Август 22, 2012, 12:35 Код
Название: Re: QNetworkAccessManager заблокировать поток до получения ответа Отправлено: crashtua от Август 22, 2012, 12:41 Bepec, плохое проектирование мне не страшно, так как пишу костыль, который связывает Qt с уже готовым приложением, и синхронным надо сделать потому, что так требует приложение, а переделывать полностью на сигналы\слоты уйдет не один день...
QtCoder, а при таком решении остальные сигналы, и там всякие вкусности Qt не умрут до завершения запроса? Название: Re: QNetworkAccessManager заблокировать поток до получения ответа Отправлено: crashtua от Август 22, 2012, 12:44 И еще, немного не в тему, надо ли после вызова readAll() удалить
Код ? Или где то в дебрях Qt оно удалится само? Название: Re: QNetworkAccessManager заблокировать поток до получения ответа Отправлено: QtCoder от Август 22, 2012, 12:48 Bepec, плохое проектирование мне не страшно, так как пишу костыль, который связывает Qt с уже готовым приложением, и синхронным надо сделать потому, что так требует приложение, а переделывать полностью на сигналы\слоты уйдет не один день... QtCoder, а при таком решении остальные сигналы, и там всякие вкусности Qt не умрут до завершения запроса? loop.exec() создает локальный цикл обработки сообщений, который прерывается по сигналу finished Ничего не умрет. Название: Re: QNetworkAccessManager заблокировать поток до получения ответа Отправлено: QtCoder от Август 22, 2012, 12:49 И еще, немного не в тему, надо ли после вызова readAll() удалить А разве ты его создал чтобы удалять?Код ? Или где то в дебрях Qt оно удалится само? Название: Re: QNetworkAccessManager заблокировать поток до получения ответа Отправлено: kambala от Август 22, 2012, 13:03 Цитировать void QNetworkAccessManager::finished ( QNetworkReply * reply ) [signal] так что удалять надо... Note: Do not delete the reply object in the slot connected to this signal. Use deleteLater(). Название: Re: QNetworkAccessManager заблокировать поток до получения ответа Отправлено: Patrin Andrey от Август 22, 2012, 13:07 http://qt-project.org/doc/qt-4.8/qnetworkaccessmanager.html
Note: After the request has finished, it is the responsibility of the user to delete the QNetworkReply object at an appropriate time. Do not directly delete it inside the slot connected to finished(). You can use the deleteLater() function. Название: Re: QNetworkAccessManager заблокировать поток до получения ответа Отправлено: crashtua от Август 22, 2012, 13:22 Спасибо всем, работает на ура!
|