Есть приложение, оконное приложение, но окно используется только для отображения кое какой мониторинговой информация и вот понадобилось переделать это приложение в виде сервиса, вообщем переделал я, но как вижу есть проблемы с таймерами, а таймеры завязаны с хенлом окна, как можно безболезненно не переписывая много кода, сделать все таки сервисом приложение?
Здравствуйте, Аноним, Вы писали:
А>Есть приложение, оконное приложение, но окно используется только для отображения кое какой мониторинговой информация и вот понадобилось переделать это приложение в виде сервиса, вообщем переделал я, но как вижу есть проблемы с таймерами, а таймеры завязаны с хенлом окна, как можно безболезненно не переписывая много кода, сделать все таки сервисом приложение?
Таймеры отнюдь не обязательно должен быть "завязаны с хенлом окна" — достаточно воспользоваться последним параметром функции SetTimer() и указать свою функцию обработки сообщений от таймера. hWnd при этом задается равным NULL.
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Таймеры отнюдь не обязательно должен быть "завязаны с хенлом окна" — достаточно воспользоваться последним параметром функции SetTimer() и указать свою функцию обработки сообщений от таймера. hWnd при этом задается равным NULL.
До, но даже в этом случае нужн цикл выборки сообщений.
Здравствуйте, TaniaDen, Вы писали:
TD>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>Таймеры отнюдь не обязательно должен быть "завязаны с хенлом окна" — достаточно воспользоваться последним параметром функции SetTimer() и указать свою функцию обработки сообщений от таймера. hWnd при этом задается равным NULL.
TD>До, но даже в этом случае нужн цикл выборки сообщений.
Вообще, я использую в сервисах waitable timer-ы, создаваемые в отдельном потоке. Не знаю, сочтет ли автор топика переход на них "безболезненным".
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Здравствуйте, TaniaDen, Вы писали:
TD>>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>>Таймеры отнюдь не обязательно должен быть "завязаны с хенлом окна" — достаточно воспользоваться последним параметром функции SetTimer() и указать свою функцию обработки сообщений от таймера. hWnd при этом задается равным NULL.
TD>>До, но даже в этом случае нужн цикл выборки сообщений.
SDB>Вообще, я использую в сервисах waitable timer-ы, создаваемые в отдельном потоке. Не знаю, сочтет ли автор топика переход на них "безболезненным".
выходит проблема только с таймерами?
Re[2]: переделка под сервис
От:
Аноним
Дата:
10.12.03 16:39
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Здравствуйте, Аноним, Вы писали:
А>>Есть приложение, оконное приложение, но окно используется только для отображения кое какой мониторинговой информация и вот понадобилось переделать это приложение в виде сервиса, вообщем переделал я, но как вижу есть проблемы с таймерами, а таймеры завязаны с хенлом окна, как можно безболезненно не переписывая много кода, сделать все таки сервисом приложение?
SDB>Таймеры отнюдь не обязательно должен быть "завязаны с хенлом окна" — достаточно воспользоваться последним параметром функции SetTimer() и указать свою функцию обработки сообщений от таймера. hWnd при этом задается равным NULL.
а вообще можно как то сделать сервис если у меня есть два нивидимых окна, и на них завязаны события типа таймера... или нет?
Здравствуйте, TaniaDen, Вы писали:
TD>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>Таймеры отнюдь не обязательно должен быть "завязаны с хенлом окна" — достаточно воспользоваться последним параметром функции SetTimer() и указать свою функцию обработки сообщений от таймера. hWnd при этом задается равным NULL.
TD>До, но даже в этом случае нужн цикл выборки сообщений.
У ATL wisard-ом созднный наследник CComModule имеет он в Run:
MSG msg;
while (GetMessage(&msg, 0, 0, 0))
DispatchMessage(&msg);
UINT _timer_for_update=0;
До этого надо вызвать
void CALLBACK MakeUpdate(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime);
_timer_for_update = ::SetTimer(NULL,0,6000,MakeUpdate);
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>Здравствуйте, Аноним, Вы писали:
А>>>Есть приложение, оконное приложение, но окно используется только для отображения кое какой мониторинговой информация и вот понадобилось переделать это приложение в виде сервиса, вообщем переделал я, но как вижу есть проблемы с таймерами, а таймеры завязаны с хенлом окна, как можно безболезненно не переписывая много кода, сделать все таки сервисом приложение?
SDB>>Таймеры отнюдь не обязательно должен быть "завязаны с хенлом окна" — достаточно воспользоваться последним параметром функции SetTimer() и указать свою функцию обработки сообщений от таймера. hWnd при этом задается равным NULL.
А>а вообще можно как то сделать сервис если у меня есть два нивидимых окна, и на них завязаны события типа таймера... или нет?
Да всё так же... Не играет роли какое приложение станет сервисом. Достаточно из главного потока вызвать OpenSCManager и CreateService. Если у приложения есть окно то свойства сервиса комбинируй с SERVICE_INTERACTIVE_PROCESS, длятого, чтобы сервис смог это окно показать. А вообще RTFM... в MSDN всё подробно описано
The darkness around me
Shores of solar sea
Oh how i wish to go down with the sun....