Вверх ↑
Ответов: 4612
Рейтинг: 746
#1: 2014-02-23 14:55:28 ЛС | профиль | цитата
Galkov писал(а):
Возьмем (к примеру) HUB
Согласен, свойства типа "array of THI_Event" я упустил из виду.
Но, тем менее, вот инициализация связей у хаба:

Hub_18FAAA0.onEvent[0]                   := _DoEvent(Label_30F9760._work_doText,0);
Hub_18FAAA0.onEvent[1] := _DoEvent(Label_30F99E0._work_doText,0);
Hub_18FAAA0.onEvent[2] := _DoEvent(Label_30F9A80._work_doText,0);
Предлагаемая деинициалиция:

Hub_18FAAA0.onEvent[2].Event := nil;
Hub_18FAAA0.onEvent[1].Event := nil;
Hub_18FAAA0.onEvent[0].Event := nil;
После Free на первом событии хаб просто вхолостую пробежится по остальных событиях. Вот только в THIHub.doEvent есть обращение к полю FOutCount - в данном частном случае можно добавить сохранение этого поля в локальную переменную.
А, нет, поспешил с выводом - ведь и сам массив будет уничтожен. Ну, предусмотрит автор схемы, чтобы ##clear/##delete был последним внутри контейнера. Сейчас ведь тоже должен много чего городить, чтобы удалить текущую копию схемы.

Neo, там в SMTP используется упрощенная реализация соединения по TCP. Надо просто более тщательно проверить обработку ошибок. Или использовать в коде TCPClient.
карма: 26

0