|
|
|
Timer в службе не запускается
|
|||
|---|---|---|---|
|
#18+
В обычной программе все работает, а вот в службе Устанавливаю таймер: double sec=10; ActionTimerId = (UINT) SetTimer(NULL,0,(UINT)(sec * 1000), ActionHandler); Вроди все нормально, ActionTimerId присваивается некоторое большое значение А вот обработчик VOID CALLBACK ActionHandler(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) { } не хочет не в какую вызыватся, вообще ... может из за того что в службе HWND hwnd вообще на прочь отсутствует .... тогда каким образом периодически анализировать ... чего либо .... ???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2004, 18:49 |
|
||
|
Timer в службе не запускается
|
|||
|---|---|---|---|
|
#18+
SetTimer опирается на сообщения окну, так что совершенно верно, низя его использовать в сервисе. К циклу со Sleep() нет отвращения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 09:21 |
|
||
|
Timer в службе не запускается
|
|||
|---|---|---|---|
|
#18+
авторSetTimer опирается на сообщения окну Это вроде если не указан обработчик... авторВроди все нормально, ActionTimerId присваивается некоторое большое значение Значит прописался. авторVOID CALLBACK ActionHandler(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) { } не хочет не в какую вызыватся, Странно,... на первой скобке дебагом не ловится? У меня есть код где таймер задан на NULL и работает. А после SetTime, GetLastError() чё-нить сказал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 10:12 |
|
||
|
Timer в службе не запускается
|
|||
|---|---|---|---|
|
#18+
ыщо раз: для SetTimer() НЕОБХОДМО окно приложения, ибо SetTimer есть не что иное, как перехват WM_TIMER, а как его без окна схватить? P.S. он и в консольном по идее работать не должен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 10:48 |
|
||
|
Timer в службе не запускается
|
|||
|---|---|---|---|
|
#18+
автора как его без окна схватить? Например по таблице, которая заполняется по SetTimer с пустым окно. Окно - NULL? Если нет, шлём окну WM_TIMER Если да, зовём умолчательную функцию таймера, которая проверяет индекс в таблице, если находит, зовёт соответствующую функцию, если нет, сама работает. У меня есть таймер с пустым окном, работающий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2004, 11:08 |
|
||
|
Timer в службе не запускается
|
|||
|---|---|---|---|
|
#18+
ЗмейкаВ обычной программе все работает, а вот в службе Устанавливаю таймер: double sec=10; ActionTimerId = (UINT) SetTimer(NULL,0,(UINT)(sec * 1000), ActionHandler); Вроди все нормально, ActionTimerId присваивается некоторое большое значение А вот обработчик VOID CALLBACK ActionHandler(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) { } не хочет не в какую вызыватся, вообще ... может из за того что в службе HWND hwnd вообще на прочь отсутствует .... тогда каким образом периодически анализировать ... чего либо .... ???? Ошибка скорее всего с отсутсвием взаимодействия службы с рабочим столом. установи эту опцию в типе службы: SERVICE_INTERACTIVE_PROCESS если не ошибаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2006, 23:52 |
|
||
|
Timer в службе не запускается
|
|||
|---|---|---|---|
|
#18+
ЗмейкаА вот обработчик не хочет не в какую вызыватся, вообще ... может из за того что в службе HWND hwnd вообще на прочь отсутствует .... тогда каким образом периодически анализировать ... чего либо .... ???? Используйте CreateWaitableTimer и иже с ними - проще будет. А так это вопрос того что делает Ваш сервис (т.е. цикл по мессагам есть ?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 22:24 |
|
||
|
Timer в службе не запускается
|
|||
|---|---|---|---|
|
#18+
Для того, чтобы таймер отработал, нужно иметь цикл обработки сообщений, поскольку вызов функции таймера производится в DefWindowProc. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 23:40 |
|
||
|
Timer в службе не запускается
|
|||
|---|---|---|---|
|
#18+
Их есть у меняыщо раз: для SetTimer() НЕОБХОДМО окно приложения, ибо SetTimer есть не что иное, как перехват WM_TIMER, а как его без окна схватить? Не, таймер можно и без окна обрабатывать, но реально вся обработка таймера идет через посылку сообщения и обработку его в цикле обработки сообщения. Нужно использовать другие механизмы, как уже сказали, или напр. Sleep(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2006, 23:43 |
|
||
|
Timer в службе не запускается
|
|||
|---|---|---|---|
|
#18+
MasterZiv Их есть у меняыщо раз: для SetTimer() НЕОБХОДМО окно приложения, ибо SetTimer есть не что иное, как перехват WM_TIMER, а как его без окна схватить? Не, таймер можно и без окна обрабатывать, но реально вся обработка таймера идет через посылку сообщения и обработку его в цикле обработки сообщения. Нужно использовать другие механизмы, как уже сказали, или напр. Sleep(). Все нормально работает в службе Sleep() - вы этого чего? имхо - может у вас проблема в том, что вы рано таймер запускаете как я делал: создавал класс, в нем метод Start(), Stop() с статик экземпляром ... (в деструкторе вызываю Stop()) class C...Module : public CAtlServiceModuleT< C...Module, IDS_SERVICENAME > { public : DECLARE_LIBID(LIBID_..._srvLib) DECLARE_REGISTRY_APPID_RESOURCEID(IDR_PAYMENT_SRV, "{A860A1D9-45C4-491E-9EC6-A7CFD04BB6C4}") HRESULT InitializeSecurity() throw() { theTimer.Start(); return S_OK; } }; void CALLBACK myReceiving(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime) { theTimer.Stop(); ... } void myTimer::Start(void) { Stop(); ... NumberTimer = ::SetTimer(NULL, 0, Elapse, myReceiving); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 11:12 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32624134&tid=2030148]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
144ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 207ms |
| total: | 460ms |

| 0 / 0 |
