powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Timer в службе не запускается
11 сообщений из 11, страница 1 из 1
Timer в службе не запускается
    #32624134
змейка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В обычной программе все работает, а вот в службе

Устанавливаю таймер:

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 вообще на прочь отсутствует .... тогда каким образом периодически анализировать ... чего либо .... ????
...
Рейтинг: 0 / 0
Timer в службе не запускается
    #32624492
Их есть у меня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SetTimer опирается на сообщения окну,
так что совершенно верно, низя его использовать в сервисе.

К циклу со Sleep() нет отвращения?
...
Рейтинг: 0 / 0
Timer в службе не запускается
    #32624551
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторSetTimer опирается на сообщения окну
Это вроде если не указан обработчик...

авторВроди все нормально, ActionTimerId присваивается некоторое большое значение
Значит прописался.

авторVOID CALLBACK ActionHandler(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{

}
не хочет не в какую вызыватся,

Странно,... на первой скобке дебагом не ловится?
У меня есть код где таймер задан на NULL и работает.

А после SetTime, GetLastError() чё-нить сказал?
...
Рейтинг: 0 / 0
Timer в службе не запускается
    #32624623
Их есть у меня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ыщо раз: для SetTimer() НЕОБХОДМО окно приложения,
ибо SetTimer есть не что иное, как перехват WM_TIMER,
а как его без окна схватить?


P.S. он и в консольном по идее работать не должен
...
Рейтинг: 0 / 0
Timer в службе не запускается
    #32624670
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автора как его без окна схватить?

Например по таблице, которая заполняется по SetTimer с пустым окно.

Окно - NULL?
Если нет, шлём окну WM_TIMER
Если да, зовём умолчательную функцию таймера, которая проверяет индекс в таблице, если находит, зовёт соответствующую функцию, если нет, сама работает.

У меня есть таймер с пустым окном, работающий.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Timer в службе не запускается
    #34089783
sever221mar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗмейкаВ обычной программе все работает, а вот в службе

Устанавливаю таймер:

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 если не ошибаюсь.
...
Рейтинг: 0 / 0
Timer в службе не запускается
    #34092514
ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗмейкаА вот обработчик
не хочет не в какую вызыватся, вообще ... может из за того что в службе HWND hwnd вообще на прочь отсутствует .... тогда каким образом периодически анализировать ... чего либо .... ????
Используйте CreateWaitableTimer и иже с ними - проще будет.
А так это вопрос того что делает Ваш сервис (т.е. цикл по мессагам есть ?)
...
Рейтинг: 0 / 0
Timer в службе не запускается
    #34092607
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для того, чтобы таймер отработал, нужно иметь цикл обработки сообщений, поскольку вызов функции таймера производится в DefWindowProc.
...
Рейтинг: 0 / 0
Timer в службе не запускается
    #34092610
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Их есть у меняыщо раз: для SetTimer() НЕОБХОДМО окно приложения,
ибо SetTimer есть не что иное, как перехват WM_TIMER,
а как его без окна схватить?


Не, таймер можно и без окна обрабатывать, но реально вся обработка таймера идет через посылку сообщения и обработку его в цикле обработки сообщения. Нужно использовать другие механизмы, как уже сказали, или напр. Sleep().
...
Рейтинг: 0 / 0
Timer в службе не запускается
    #34093381
KGP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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);
}
...
Рейтинг: 0 / 0
Timer в службе не запускается
    #34093559
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://www.naughter.com/waitabletimer.html
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Timer в службе не запускается
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]