Я думаю, что самое простое решение здесь - изменить способ обработки ваших тем.
Я предлагаю, чтобы вместо одного потока для запросов вы создавали новый поток для каждого запроса, а затем возвращали ему код состояния (независимо от того, что это), вы можете обрабатывать любые логи c для повторной попытки аутентификации в вашем основном потоке (т. е. отобразить диалоговое окно аутентификации, а затем повторно запустить поток аутентификации с учетными данными).
Это также позволяет лучше инкапсулировать ваш обработчик запросов, что является большим плюсом. Чтобы правильно инкапсулировать эту логику c (чтобы вам не приходилось проверять каждый запрос), вы должны определить какой-то тип обработчика запроса (либо класс, либо функцию). Например,
StatusCode make_reqeust(...) {
// Deal with the logic on authentication here
}
Где StatusCode - это тип для кода состояния HTTP.
Конечно, это не решает проблему вашего потока пользовательского интерфейса, потенциально ожидающего завершения рабочего потока sh , так что вам также нужен некоторый метод refre sh пользовательского интерфейса, который вызывается каждые x раз и который проверяет состояние всех рабочих потоков (т. е. проверяя возвращенные std::future
). Вы также хотели бы изменить приведенный выше пример, чтобы он мог порождать отдельный поток и возвращать std::future
в этом случае.