У меня есть приложение, которое отправляет HTTP-запросы и обрабатывает полученный ответ. Основной поток блокируется до тех пор, пока не вернется ответ, иначе мы не сможем обработать данные. Чтобы отправить эти запросы, пользователь должен пройти аутентификацию. Я хочу получить ответ 401 и, прежде чем возвращать ответ для обработки моим приложением, запросить у пользователя аутентификацию. В зависимости от успеха я хочу повторить попытку отправить исходный запрос и вместо этого вернуть тот ответ или, если аутентификация не удалась, вернуть исходный ответ 401.
Я использую C ++ REST SDK для отправки HTTP-запросов. Это происходит в другом потоке (pplx :: task). Я также использую модальное диалоговое окно MFC для запроса аутентификации. Некоторые из вас могут увидеть возникшую тупиковую ситуацию. Если нет, позвольте мне объяснить подробнее.
Основной поток ожидает завершения HTTP-запроса. Внутри этого потока я ловлю 401 и хочу запустить диалог. Для этого я использую boost::signal
. Этот сигнал вызывает SendMessage
дескриптора, который я хочу отобразить. После того, как сообщение будет обработано циклом сообщений MFC, он запустит диалог (в основном потоке). Это зависит от цикла сообщений MFC, который заблокирован в ожидании HTTP-запроса. Короче говоря, основной поток уже ожидает завершения запроса, поэтому он не может запустить цикл сообщений для получения вызова от SendMessage
.
Основной поток ожидает рабочего потока. Рабочий поток должен запустить диалог в основном потоке, прежде чем он сможет продолжить. Тупик. Есть ли у кого-нибудь умные решения для решения этой проблемы?
WM_APP + nnn
), и основной поток должен соответствующим образом обновлять пользовательский интерфейс. . Что-то не так с этим дизайном? Есть ли лучшая альтернатива? - person Constantine Georgiou   schedule 20.03.2020