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

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

Работа с сервисами - помогите.


Страницы:   1 2

koha ©   (2007-10-01 07:36:00) 

Создал свой сервис работает все пучком, сидит в трее имееет меню, но решил добавить форм немного (о программе, настройки).. Формы вызываются, но не закрываются виснут, не пойму вчем дело, подскажите вчем дело?


Сергей М.   (2007-10-02 10:48:00) [21]


> koha


Ты осознаешь, что экземпляр сервис-приложения в контексте своего процесса может создавать более чем один сервис ?


Сергей М.   (2007-10-02 10:45:00) [22]


> Не окно, А Application.Handle


Application.Handle - это хэндл главного окна приложения.


koha   (2007-10-01 18:24:00) [23]


> tesseract ©   (01.10.07 18:12) [14]
> > Не окно, А Application.Handle...А может PostThreadMessage
> ?  Да и для кого семафоры и mutex-ы придумали ? Через них
> контроль работы потоков не проще будет вести?


- Для меня это еще уууу... Я еще только учусь. лопачу dooks разный, но везде так скудно написано, особенно в русско-язычной литературе, а главное мало написано о правильном проектировании подобных прогррамм.


koha   (2007-10-01 18:19:00) [24]


> tesseract ©   (01.10.07 18:12) [14]
> > Не окно, А Application.Handle...А может PostThreadMessage
> ?  Да и для кого семафоры и mutex-ы придумали ? Через них
> контроль работы потоков не проще будет вести?


- Для меня это еще уууу... Я еще только учусь. лопачу dooks разный, но везде так скудно написано, особенно в русско-язычной литературе, а главное мало написано о правильном проектировании подобных прогррамм.


tesseract   (2007-10-01 18:12:00) [25]


> Не окно, А Application.Handle...


А может PostThreadMessage ?  Да и для кого семафоры и mutex-ы придумали ? Через них контроль работы потоков не проще будет вести?


koha   (2007-10-01 18:11:00) [26]


> Sairex ©   (01.10.07 17:48) [10]
> Ребят а если не трудно то и на мой вопросик ответьте плииз:
>  Не моглибы вы скинуть пример (рабочий) сервиса, а то сколько
> не бился не получалось.


А что не получалось?


koha   (2007-10-01 17:59:00) [27]


> Сергей М. ©   (01.10.07 17:30) [8]
> > дочерний поток при определенных условиях отправляет сообщения
> > сервису через sendmessage()Какое окно фигурирует в ка-
> ве получателя сообщения ?


Не окно, А Application.Handle....

procedure TSvcAntiAutoRuns.ServiceCreate(Sender: TObject);
begin
 AFThrd   := TAntiAutoRunThread.Create(Application.Handle,WM_USER+1);



> Сергей М. ©   (01.10.07 17:33) [9]
> > в сервисе у меня запускается еще один потокСервис и так
> уже исполняется в собственном доп.потоке.Чем вызвана необходимость
> создавать еще один доп.поток ?


1. Для выполнения параллельности задачи.
2. в дальнейшей работе сервиса остановка OnExecut означает завершение работы сервиса,  а приостановка дочернего потока не завершает работу

Например в onExecut проверяется состояния дочернего потока

while Not (AFThrd.Status = TS_STOPED) do begin //...

3. Планируется, что эта программа будет работать и на win9х но только без запуска сервиса как простая программа, а для совместимости главна работа программы вынесена в отдельный юнит и поток, который может работать и там и там.


Сергей М.   (2007-10-01 17:50:00) [28]


> не получалось


Что конкретно не получалось ?


Sairex   (2007-10-01 17:48:00) [29]

Ребят а если не трудно то и на мой вопросик ответьте плииз:
Не моглибы вы скинуть пример (рабочий) сервиса, а то сколько не бился не получалось.


Сергей М.   (2007-10-01 17:33:00) [30]


> в сервисе у меня запускается еще один поток


Сервис и так уже исполняется в собственном доп.потоке.
Чем вызвана необходимость создавать еще один доп.поток ?


Сергей М.   (2007-10-01 17:30:00) [31]


> дочерний поток при определенных условиях отправляет сообщения
> сервису через sendmessage()


Какое окно фигурирует в ка-ве получателя сообщения ?


koha   (2007-10-01 17:20:00) [32]

Еще вопросик. Вот в сервисе у меня запускается еще один поток, собственно сервис управляет этим потоком дочерний поток при определенных условиях отправляет сообщения сервису через sendmessage(), а тот их обрабатывает своим обработчиком
type
 TSvcAntiAutoRuns = class(TService)
   //........
   procedure ThreadMessage(var Msg:TMessage);message WM_USER+1;
  //.........


Но если определенные события возникнут при загрузке системы до входа юзера в уч. запись будут ли эти сообщения обрабатываться?


Сергей М.   (2007-10-01 14:40:00) [33]

Можно, но не нужно, точно так же как и форму.

Еще раз - UI неявляется скол-либо оправданной задачей сервиса. Для реализации UI существуют обычные приложения и приложения-апплеты.


koha   (2007-10-01 14:33:00) [34]


> Сергей М. ©   (01.10.07 10:13) [4]


- К стати, а иконку в трее и менню можно?


Сергей М.   (2007-10-01 10:13:00) [35]


> как правильно сделать?


Работать с формой в основном потоке.


> форма нужна, в принципе


> ничего не делает, только инфу показывает


Убирай форму из приложения-сервиса пока не поздно.

Если нужно "показывать инфу" и интерактивно управлять работой сервиса, реализуй приложение-апплет панели управления, в нем и работай с формами.


koha   (2007-10-01 10:07:00) [36]

А как правильно сделать?
- Но форма нужна, в принципе, я придумал такой метод: у формы OnClose на Form.hide, то форма не зависает а просто исчезает из вида так можно?
- Форма в принципе ничего не делает, только инфу показывает.


Сергей М.   (2007-10-01 09:08:00) [37]


> Формы вызываются, но не закрываются виснут, не пойму вчем
> дело


Работа с формами в доп.потоках недопустима.


Turbouser   (2007-10-01 07:44:00) [38]

Сервис с формами? Нельзя так делать. Не культурно.


Страницы:   1 2

Наверх

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