2014-11-30 6 views
2

Я программирую небольшое приложение с qt5. Это приложение получает ответ от сервера API каждую минуту. Все отлично работает, но я столкнулся с ошибкой.Изменение сетевого интерфейса во время выполнения

При тестировании приложения я обнаружил, что если моя беспроводная связь будет отключена и снова подключена, приложение будет работать нормально. Также, если я использую свое широкополосное соединение, и соединение отключено и снова подключено, все отлично работает. Теперь, если я использую свою беспроводную сеть при запуске приложения, я отключу беспроводную связь и подключу свой широкополосный доступ, программа не увидит широкополосное соединение и не даст мне ошибку сети.

Я использую один экземпляр QNetworkAccessManager для подключения. Интересно, что если я создал новый экземпляр QNetworkAccessManager для каждого запроса, приложение будет работать нормально. Но я думаю, что будет накладные расходы на объявление нового экземпляра для каждого запроса и создание соединений. Я попробовал также использовать clearAccessCache() перед запросом без везения.

Так что в основном я ищу что-то, чтобы сбрасывать QNetworkAccessManager с каждым запросом. Вот пример кода моего запроса:

// At class construct 
manager = new QNetworkAccessManager(this); 
// .... 
// At member function 
url = new QUrl("http://www.gridstatusnow.com/status"); 
manager->get(QNetworkRequest(*url)); 
+0

«Но я думаю, что будет накладные расходы при объявлении нового экземпляра для каждого запроса», почему бы не проверить это первым? Угадывание обычно не очень хорошая идея. – BartoszKP

ответ

3

Вы можете попытаться воссоздать QNetworkAccessManager только если сеть не доступна:

// At member function 
if (manager->networkAccessible() == QNetworkAccessManager::NotAccessible) 
{ 
    delete manager; 
    manager = new QNetworkAccessManager(this); 
} 

The documentation объясняет:

По умолчанию значение этого свойства отражает физическое состояние устройства.

Смежные вопросы