Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Service: проблема с OnExecute [D6, Win2k]


Геннадий ©   (2004-09-10 09:55:00) 

Создаю пустое ServiceApplication. Interactive устанавливаю в True. В обработчике OnExecute пишу что-нибудь простое (создать файл, например). Инсталлирую службу. Она не запускается. Но если убрать обработку OnExecute - служба и запустится, и остановится. Отдельная проблема с интерактивностью - если в обработчике (например) OnPause я могу создать файл и записать в него строку, то показать ShowMessage - нет (служба повиснет). Что я делаю не так?


Digitman   (2004-09-10 10:31:00) [1]


> Геннадий


события OnCreate, OnDestroy возбуждаюся в осн.трэде, все прочие события - в дополнительном


Erik1   (2004-09-10 10:25:00) [2]

Посмотри сначала примеры для работы с TThread там тоже есть Execute! Еще можно использовать события OnStart OnStop и в них соответственно запускать свой тред на выполнение и останавливать его. Тогда будет иметь смысл использование OnPause OnContinue как Syspend и Resume.


Digitman   (2004-09-10 10:21:00) [3]


> В обработчике OnExecute пишу что-нибудь простое .. Она не запускается


она запускается !.. но тут же завершает работу, потому что завершилась процедура обработки события OnExecute()


> если убрать обработку OnExecute - служба и запустится, и
> остановится


все правильно, так и должно быть


> Отдельная проблема с интерактивностью - если в обработчике
> (например) OnPause я могу создать файл и записать в него
> строку, то показать ShowMessage - нет (служба повиснет).
> Что я делаю не так?


к "интерактивности" это не имеет отношения
а проблема "зависания" связана с тем, что код сервиса исполняется в доп.трэде, в котором непосредственный вызов ShowMessage() недопустим - ShowMessage создает VCL-объект (форму), а объекты VCL , как известно, непотокобезопасны.

следует либо синхронизировать обращения к VCL-форме с осн.трэдом процесса сервиса (любым удобным способом) либо отказаться от ShowMessage() и для целей отладки вызывать MessageBox()


Наверх

Титульная страница Поиск, карта сайта Написать письмо