Delphi 6. Как установить тайм-аут idTelnet.Connect для раннего возврата при отсутствии соединения
Вызов idTelnet.Connect обычно подключается к удаленному устройству мгновенно.
Но,
если удаленное устройство не отвечает, то вызов idTelnet.Connect не возвращается.
Он ожидает ответа от удаленного устройства.
Это вешает все приложение.
Как я могу установить тайм-аут, чтобы idTelnet.Connect возвращался в течение nn мс
независимо от того, было ли установлено соединение или нет?
1 ответ
если удаленное устройство не отвечает, то вызов idTelnet.Connect не возвращается.
Да, это будет - в конце концов.
Он ожидает ответа от удаленного устройства.
Или до тех пор, пока ОС окончательно не сдастся и не разорвет соединение, сообщив об ошибке, которую Indy выдаст в качестве исключения.
Это вешает все приложение.
Это означает, что вы звоните Connect()
в контексте основного потока пользовательского интерфейса, что вы не должны делать в первую очередь. Если вы должны сделать это, по крайней мере, поместите TIdAntiFreeze
компонент вашей MainForm (и будьте готовы к любым последствиям повторного входа, которые могут возникнуть). В противном случае переместите ваш код сокета в отдельный рабочий поток.
Как я могу установить тайм-аут, чтобы idTelnet.Connect возвращался в течение nn мс, независимо от того, было ли установлено соединение или нет?
Вы не сказали, какую версию Indy вы используете. Delphi 6 очень старая. Если вы используете версию Indy, которая поставляется с ним, то вы используете Indy 8 или 9. Connect()
В Indy 8 вообще нет функции тайм-аута. В Indy 9 Connect()
имеет дополнительный ATimeout
параметр. В Индии 10 ATimeout
параметр был заменен на новый ConnectTimeout
имущество.