Изменение сетевого интерфейса во время выполнения

Я программирую небольшое приложение с 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));

person Ahmed Essam    schedule 30.11.2014    source источник
comment
Но я думаю, что при объявлении нового экземпляра для каждого запроса будут накладные расходы, почему бы не проверить это сначала? Гадать обычно не лучшая идея.   -  person BartoszKP    schedule 30.11.2014


Ответы (1)


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

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

В Документация поясняет:

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

person BartoszKP    schedule 30.11.2014