Здравствуйте, форумчане

Пишу многопоточный сервер в Delphi. Работает, как сервис(TService).
при инициализации TService, создаётся "серверный" объект TThread, в котором идёт приём подключений.
При каждом подключении и проверке его на допустимый адрес, создаётся "клиентский" объект TThread.
в свойства этого объекта передаются все необходимые для его работы значения (как то дескриптор сокета,
адресная структура и т.д.). и этот объект уже самостоятельно работает с ОДНИМ клиентским подключением,
обрабатывает пакеты, высылает ответы и т.д.
помимо этого, у "серверного" объекта TThread есть динамический массив этих самых "клиентских" объектов —
подключений.
необходимо это для того, чтобы при завершении работы TService, например, поочерёдно остановить все эти
"клиентские" TThread, затем "серверный" TThread и уничтожить все объекты.
Вопрос в следующем:
Клиентское подключение может внезапно завершиться с ошибкой, клиент может самостоятельно отключиться.
"клиентская" нить прекращает работу, но для сервера, она — всё ещё "активное" подключение и находится в
динамическом массиве. Т.е. возникает необходимость в — как бы — менеджере нитей, который будет
периодически — ОТ ЛИЦА СЕРВЕРА — добивать уже неработающие клиентские TThread'ы, "подчищать" свой динам.
массив "клиентских" TThread'ов.
но мне не нравится слово "периодически" — как-то не этично чтоли
и интересует: как, вообще, делается организация таких вещей? какие идеи вы можете посоветовать?
алсо, не прошу готового кода или чего-то такого. просто сталкиваюсь с этим — фактически — впервые.
поэтому прошу братского совета! ^^ заранее, спасибо.