Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];

Вниз

Как потоку получить оповещение о выходе из 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.04 c
6-1162999409
DVM
2006-11-08 18:23
2007.07.29
Как правильно сформировать POST запрос?


2-1183639600
tytus
2007-07-05 16:46
2007.07.29
Трехзвенка. Как отключить клиента?


2-1183404561
ilya_ae
2007-07-02 23:29
2007.07.29
insertSql


15-1182769614
AVS2007
2007-06-25 15:06
2007.07.29
деассемблированый код в delphi


15-1182974563
IMHO
2007-06-28 00:02
2007.07.29
Как вы решаете проблему с Интернетом во время отпуска?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский