Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Ошибка ETetheringException в Delphi XE8: понимание и решение проблемы с ограничением портов для тредов

Delphi , Синтаксис , Ошибки и Исключения

В данной статье мы рассмотрим проблему, с которой сталкиваются разработчики в Delphi XE8, связанную с обработкой исключения ETetheringException при запуске приложения. Это исключение возникает в случае, когда менеджер тредов троттлинга резервирует 20 портов в диапазоне от 2020 до 2039 для запуска своих потоков коммуникации. Проблема заключается в том, что при попытке запустить 21-ый экземпляр приложения на одном компьютере, приложение становится неоткликающимся до тех пор, пока его не завершат принудительно. В статье будет дан пересказ информации из контекста, а также рассмотрены возможные решения, включая подтвержденный ответ от сообщества.

Описание проблемы

При разработке приложений на Delphi, особенно при использовании компонентов для троттлинга, важно понимать, как работает механизм резервирования портов. В случае использования TTetheringManager и TTetheringProfile, при запуске 20 экземпляров приложения на одном компьютере, 21-ый экземпляр может вызвать исключение ETetheringException. Это происходит из-за того, что менеджер троттлинга пытается использовать порты, которые уже заняты другими экземплярами приложения.

Исключение ETetheringException

Исключение ETetheringException может быть создано в методе Execute класса TTetheringNetworkManagerCommunicationThread из модуля System.Tether.NetworkAdapter. Это происходит, когда серверы TCP или UDP коммуникации не могут быть запущены. В отладчике исключение отображается корректно, но при продолжении выполнения программы приложение застревает в функции AcquireExceptionObject из модуля System и больше не возвращается.

Попытки решения

Разработчик пытался перехватить исключение с помощью конструкции try...except, но это не помогло. Он также использовал обработчик события OnException приложения, но он также не был выполнен.

Альтернативный ответ

В комментариях было предложено использовать ограничение на создание 20-ти экземпляров приложения, что является временным решением до устранения баги. Также было отмечено, что исключение происходит в отдельном треде, и его не удается перехватить в главном потоке.

Подтвержденный ответ

Разработчик обнаружил, что проблема действительно является багом в реализации троттлинга, и создал отчет о качестве для его фиксации (ссылка на отчет: https://quality.embarcadero.com/browse/RSP-11345). Это подтверждает, что проблема не в коде разработчика, а в самом компоненте.

Пример кода

Для демонстрации проблемы, вот пример кода, который может быть использован в обработчике события FormShow:

procedure TForm1.FormShow(Sender: TObject);
begin
  try
    try
      TetheringAppProfile1.Manager := TetheringManager1;
    except
      ShowMessage('Произошла ошибка при назначении менеджера троттлинга: ');
    end;
  finally
    ShowMessage('Блок finally выполнен');
  end;
end;

Однако, как было отмечено в сообщениях, блок except и finally не достигаются, и приложение застревает.

Заключение

Проблема с ETetheringException в Delphi XE8 связана с ограничением количества портов для тредов троттлинга. Разработчикам стоит быть внимательными при работе с такими компонентами и, при необходимости, использовать альтернативные подходы или обходить проблему, пока она не будет исправлена. Следите за обновлениями от Embarcadero, чтобы быть в курсе последних решений и исправлений.

Создано по материалам из источника по ссылке.

Разработчики в Delphi XE8 сталкиваются с ошибкой ETetheringException, связанной с ограничением портов для тредов троттлинга, и ищут способы её понимания и решения.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Ошибки и Исключения ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 12:59:28/0.0020139217376709/0