Я бы хотел загрузить файл из моей программы на Delphi в отдельной ветке, посвященной загрузке.
Проблема в том, что основная программа может быть закрыта в любое время (таким образом, поток загрузки также может быть завершен в любое время). Поэтому, даже если нет соединения или сервер задерживается на драгоценные секунды, мне нужен способ завершить поток загрузки в течение секунды или двух.
Какую функцию вы, ребята, порекомендуете использовать?
Я экспериментировал с InterOpenURL / InternetReadFile, но у него нет параметра тайм-аута. У него есть асинхронная версия, но я не смог найти никаких рабочих примеров Delphi, и я не уверен, что асинхронная версия защитит меня от зависаний ...
Раньше мне рекомендовали использовать сокеты, но TClientSocket, похоже, также не имеет функции тайм-аута.
Мне нужно быть полностью подготовленным, чтобы, если у пользователя есть проблемы с подключением к Интернету на его / ее компьютере или веб-сервер продолжает тормозить, мое приложение не зависает перед закрытием.
Пожалуйста, имейте в виду, отвечая, что я не хочу использовать ни сторонние компоненты, ни Indy. Мы приветствуем любой пример кода.
Спасибо!
InternetReadFile
может быть вызван с произвольным количеством байтов, извлекаемых в цикле. Если вы объедините это с проверкой завершения в своем потоке, отметьте поток для завершения при закрытии приложения и дождитесь завершения потока, у вас не должно быть никаких зависаний. - person Lieven Keersmaekers   schedule 23.08.2010