2017-02-10 10 views
1

Вызов idTelnet.Connect обычно подключается к удаленному устройству мгновенно.
Но,
Если удаленное устройство не отвечает, , то вызов idTelnet.Connect не возвращается.
Он ждет ответа от удаленного устройства.Delphi 6. Как установить idTelnet.Connect таймаут для раннего возврата без подключения

Это повесит все приложение.

Как установить тайм-аут, чтобы idTelnet.Connect возвращался в пределах nn ms
независимо от того, установлено соединение или нет?

+0

Я рекомендую запустить код в фоновом потоке. – mjn

+0

Есть ли свойство ConnectTimeout? Если нет, я бы попробовал текущий Indy 10.6.2 – mjn

+0

В Indy 10 у 'TIdTCPClient' есть свойство' ConnectTimeout'. В Indy 9 нет свойства 'ConnectTimeout', но' Connect() 'вместо этого имеет необязательный параметр' ATimeout'. –

ответ

1

Если удаленное устройство не отвечает, то вызов idTelnet.Connect не возвращается.

Да, это будет - в конце концов.

Ожидает ответа от удаленного устройства.

Или до тех пор, пока ОС окончательно не откажется от соединения и сообщит об ошибке, которую Indy затем поднимет в качестве исключения.

Это повесит все приложение.

Это означает, что вы вызываете Connect() в контексте основной темы пользовательского интерфейса, которую вы не должны делать в первую очередь. Если вы должны это сделать, по крайней мере, разместите компонент TIdAntiFreeze на вашем MainForm (и будьте готовы к устранению любых последствий повторного входа, которые могут возникнуть). В противном случае переместите свой код сокета на отдельный рабочий поток.

Как установить таймаут, чтобы idTelnet.Connect возвращался в пределах nn ms независимо от того, установлено соединение или нет?

Вы не сказали, какая версия Indy вы используете. Delphi 6 очень старый. Если вы используете версию Indy, которая поставляется с ней, то вы используете Indy 8 или, возможно, 9. Connect() не имеет функций тайм-аута вообще в Indy 8. В Indy 9 Connect() имеет необязательный параметр ATimeout. В Indy 10 параметр ATimeout был заменен новым свойством ConnectTimeout.

+0

Спасибо Реми за то, что он раскрутил проблему. – AndersJ

+0

Можно ли обновить Delphi 6 до Indy 10? – AndersJ

+0

[Да, он может] (http://ww2.indyproject.org/Sockets/Docs/Indy10Installation.EN.aspx). Фактически Indy 10 поддерживает весь путь обратно в Delphi 5. –

 Смежные вопросы

  • Нет связанных вопросов^_^