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

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

2

Решение

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

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

Документация объясняет:

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

3

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector