Создание потомка TService - PullRequest
1 голос
/ 18 мая 2011

Я смотрю на создание потомка TService, чтобы при написании нового сервиса я не изобретал, так сказать, колесо.

Я создал рабочий поток предка, которым будет управлять этот потомок TService (потоки-потомки реализуют код для службы).

Этот потомок TService также будет иметь класс для записи в пользовательский журнал событий Windows и поток, который проверяет наличие новых версий службы с http-сервера, а затем обновляет себя при необходимости.

Моя проблема в том, как лучше всего создать экземпляр потомка TService из источника проекта?

Должен ли потомок быть чистым классом или иметь модуль dfm / datamodule?

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

Вы можете «просто» запустить новое сервисное приложение. Это создаст для вас потомка TService (кстати, в его собственном модуле данных)? Он также заботится о создании службы для вас в dpr. (Запуск нового сервисного приложения: Файл | Новый | Другой | Delphi Projects | Сервисное приложение). Кроме того, он будет гарантировать, что надлежащие модули включены, так как приложению службы требуется глобальная переменная «Приложение» для ссылки на экземпляр TServiceApplication, а не экземпляр того, что создается для обычного приложения VCL Forms.

См. Сбой службы OnExecute, порожденный поток не выполняется для реализации приложения-службы "без костей".

DataModules поддерживают визуальное наследование форм, как и формы. Таким образом, если вы хотите создать потомков, вы можете добавить новый модуль данных службы в свой dpr и наследовать от службы, уже созданной IDE. Тогда используйте либо параметры проекта | формы для управления тем, какой экземпляр создается из dpr (первый в списке справа) или редактирование dpr вручную.

Другими словами: используйте TService1, созданный при создании нового приложения-службы, в качестве общей базы и создайте дочерние службы, унаследовав от этой базы визуальное наследование форм. Файл | Новый | Другое | Унаследованные элементы, должен перечислить ваш первый модуль данных службы.

0 голосов
/ 25 мая 2011

Я бы не стал связываться с потомком TService, который слишком часто создается в IDE.

Для повторного использования вы можете создать свой собственный базовый класс "TMyServiceConsumer".Вы передадите ему объект TService, а затем сможете повторно использовать этот класс в разных проектах.

Это классический пример «наследование против состава»:

наследование против составадля тестируемости

Для визуальной и невизуальной части вашего вопроса: Это зависит.

Очень полезно сделать потребителя потомком TDataModule, если вы часто используете компоненты ихочу иметь преимущества RAD.

Это аналогичный подход к «TMainWorkThread» в посте, на который Марджан уже указал в другом ответе:

Сбой службы OnExecute, порожденная нитьне выполнен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...