![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с сервисами - помогите.
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]Сервис с формами? Нельзя так делать. Не культурно.