Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.29;
Скачать: CL | DM;

Вниз

Как потоку получить оповещение о выходе из suspend?   Найти похожие ветки 

 
Чапаев ©   (2007-02-12 11:53) [0]

Окно создавать ОЧЕНЬ не хочется.


 
tesseract ©   (2007-02-12 12:17) [1]

Из suspend потока или suspend Windows?


 
Чапаев ©   (2007-02-12 12:25) [2]

> [1] tesseract ©   (12.02.07 12:17)
Ой... Пардон. Windows.


 
Игорь Шевченко ©   (2007-02-12 12:40) [3]

Чапаев ©   (12.02.07 12:25) [2]

То есть, WM_POWERBROADCAST ты не хочешь ловить ?


 
Чапаев ©   (2007-02-12 12:50) [4]

> [3] Игорь Шевченко ©   (12.02.07 12:40)
Пытаюсь. И WM_POWERBROADCAST, и WM_POWER. Не доходят. WM_HOTKEY точно таким же (PeekMessage(Msg,0,WM_*,WM_*,PM_REMOVE)) способом ловится, а WM_POWER* -- нет.


 
clickmaker ©   (2007-02-12 13:12) [5]


> [4] Чапаев ©   (12.02.07 12:50)
> > [3] Игорь Шевченко ©   (12.02.07 12:40)
> Пытаюсь. И WM_POWERBROADCAST, и WM_POWER. Не доходят

а каким окном их ловишь? Подозреваю, что они приходят только top-level окнам


 
Чапаев ©   (2007-02-12 13:16) [6]

> [5] clickmaker ©   (12.02.07 13:12)
Эх... А так хочется без окон обойтись.


 
clickmaker ©   (2007-02-12 13:32) [7]


> [6] Чапаев ©   (12.02.07 13:16)

в Windows да без окон?


 
Чапаев ©   (2007-02-12 13:54) [8]

> [7] clickmaker ©   (12.02.07 13:32)
В службе.


 
Чапаев ©   (2007-02-12 13:55) [9]

В общем, сделал окно, которое отправляет сообщение потоку... Уродство. :"-(


 
Игорь Шевченко ©   (2007-02-12 14:32) [10]

Я извиняюсь, а зачем службе знать, что она после suspend"а ? Я понимаю, драйверу устройства надо знать, чтобы железку проинициализировать, так у него на это ядерный вызов есть, чтобы получать оповещения об изменении в питании.


 
Rouse_ ©   (2007-02-12 15:19) [11]

А SERVICE_CONTROL_POWEREVENT с WM_POWERBROADCAST приходящим в dwEventType уже разве отменили? :)


 
Чапаев ©   (2007-02-12 21:07) [12]

> [11] Rouse_ ©   (12.02.07 15:19)
Буду выяснять... ;-)


 
Чапаев ©   (2007-02-14 13:41) [13]

Переписал стандартный vcl"овский TService так, чтобы дополнительные управляющие сообщения обрабатывал. Спасибо, Rouse.


 
Сергей М. ©   (2007-02-14 15:04) [14]


> Чапаев ©   (14.02.07 13:41) [13]


Ты со стула упал ?)
Не трогай генофонд).. Метод DoCustomControl() специально для кулибиных и так уже виртуален)


 
Чапаев ©   (2007-02-14 15:10) [15]

> Не трогай генофонд)..
Его я и не трогаю. Создал (передрал из стандартного) свой класс с установкой HandlerEx().

> Метод DoCustomControl()
Так-то оно так, но:
1) стандартный Handler() просто не может получать расширенные управляющие события;
2) GetNTControlsAccepted() вшита в private секцию TService.


 
Сергей М. ©   (2007-02-14 15:15) [16]


> 1) стандартный Handler() просто не может получать расширенные
> управляющие события;


Что за бред ?

     if msg.message = CM_SERVICE_CONTROL_CODE then
     begin
       OldStatus := FService.Status;
       try
         ActionOK := True;
         case msg.wParam of
           SERVICE_CONTROL_STOP: ActionOK := FService.DoStop;
           SERVICE_CONTROL_PAUSE: ActionOK := FService.DoPause;
           SERVICE_CONTROL_CONTINUE: ActionOK := FService.DoContinue;
           SERVICE_CONTROL_SHUTDOWN: FService.DoShutDown;
           SERVICE_CONTROL_INTERROGATE: FService.DoInterrogate;
         else
           ActionOK := FService.DoCustomControl(msg.wParam); //перекрывай в своем наследнике этот самый DoCustomControl() и вытворяй в его теле все что тебе вздумается !
         end;


 
Чапаев ©   (2007-02-14 15:21) [17]

> Что за бред ?
Note that these control codes are not supported by the Handler function.
SERVICE_CONTROL_DEVICEEVENT
SERVICE_CONTROL_HARDWAREPROFILECHANGE
SERVICE_CONTROL_POWEREVENT
SERVICE_CONTROL_SESSIONCHANGE


Так говорил MSDN. ;-)


 
Сергей М. ©   (2007-02-14 15:34) [18]


> Чапаев ©   (14.02.07 15:21) [17]


Ах ты вон о чем !)

Ну а чем не понравился вариант с рантайм-перехватом вызова RegisterServiceCtrlHandler с целью подмены этого вызова на вызов RegisterServiceCtrlHandlerEx ?


 
Rouse_ ©   (2007-02-14 15:46) [19]

ОФФ: Вот именно по этому все такие вещи я предпочитаю писать на АПИ, тут только самому можно накосячить :)


 
Сергей М. ©   (2007-02-14 16:16) [20]


> Rouse_ ©   (14.02.07 15:46) [19]


Да ладно тебе)
Борландовское творчество для маздайной линейки ОС не такое уж и "косячное")


 
Rouse_ ©   (2007-02-14 18:09) [21]

Не такое уж - согласен... Сейчас с Жекой упарились, пока врубились что к чему.
У меня сервис на АПИ, а его модуль крутящийся в сервисе требует выноса в поток (там работа с электронными ключами длительная). Соответственно что делаем - оборачиваем егойный вызов в TThread. Дергаем по необходимости Synhronize и что получаем? Прально, получаем дулю. Т.к. Synhronize встает в ступор на вот этой строчке:
WaitForSingleObject(SyncProcPtr.Signal, INFINITE);
А главный поток у нас как известно для SCM отведен - сервис то в своем крутиться...
Пришлось как обычно через ж. делать. Содавать окно и синхронный SendMessage с указателем на необходимый метод слать...


 
Сергей М. ©   (2007-02-15 13:15) [22]


> Rouse_ ©   (14.02.07 18:09) [21]


А нафига синхронизироваться с осн.потоком сервис-процесса ?


 
Rouse_ ©   (2007-02-16 17:44) [23]

Так вот правильно, с ним то как раз синхронизироваться не нужно :)
А TThread к нему лезет...


 
Eraser ©   (2007-02-16 20:46) [24]

мда, столкнулся тоже некоторое время назад с необходимостью перехвата SERVICE_CONTROL_SESSIONCHANGE.

Пришлось написать SvcMgrEx.pas если кому надо - вышлю.


 
Чапаев ©   (2007-02-17 08:45) [25]

> [24] Eraser ©   (16.02.07 20:46)
Шамаааан! У меня тоже SvcMgrEx.pas! :-D

Сегодня тудыть ещё надо SERVICE_CONTROL_DEVICEEVENT впендюрить...


 
Ketmar ©   (2007-02-17 12:03) [26]

> Eraser ©   (16.02.07 20:46) [24]
зашвырни в меня. я ленивый писать. %-)  ketmar-glyph-online.ua
%-)


 
Чапаев ©   (2007-02-18 14:12) [27]

Ещё вопросик. Чревата ли чем-нибудь нехорошим обработка событий непосредственно в HandlerEx()? А то для обработки стандартных событий отправляется сообщение сервисному потоку...


 
Eraser ©   (2007-02-18 14:29) [28]

> [26] Ketmar ©   (17.02.07 12:03)

ушло )

> [27] Чапаев ©   (18.02.07 14:12)


> А то для обработки стандартных событий отправляется сообщение
> сервисному потоку...

в SvcMgr так и сделано, однако для HandlerEx пришлось ивратиться, т.к. там параметров побольше будет.


 
Чапаев ©   (2007-02-18 14:33) [29]

> в SvcMgr так и сделано, однако для HandlerEx пришлось ивратиться,
> т.к. там параметров побольше будет.
Так о том и речь. Нормально ли будет обрабатывать прямо в HandlerEx()?

В принципе, длительные действия будут выполняться в собственных потоках.


 
Eraser ©   (2007-02-18 16:11) [30]

> [29] Чапаев ©   (18.02.07 14:33)

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


 
Rouse_ ©   (2007-02-19 09:58) [31]


> Чревата ли чем-нибудь нехорошим обработка событий непосредственно
> в HandlerEx

Ну если был вызван не RegisterServiceCtrlHandlerEx  а RegisterServiceCtrlHandler, то чревато... Кол-во параметров, то разное...



Страницы: 1 вся ветка

Текущий архив: 2007.07.29;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.019 c
15-1183140804
antonn
2007-06-29 22:13
2007.07.29
доступ к файлу и htaccess


2-1183552580
Bad_B
2007-07-04 16:36
2007.07.29
Создать и уничтожить


15-1183450467
Начинающий программист
2007-07-03 12:14
2007.07.29
Книга по Delphi


15-1183343665
Grademax
2007-07-02 06:34
2007.07.29
Как определить наличие CD в приводе?


2-1183529439
_Asph
2007-07-04 10:10
2007.07.29
Обновление данных в таблице