Таймер в win32 сервисе

Вы не делаете ничего плохого.

Для атрибута DateTime Azure AD B2C читает и пишет:

  1. Значение атрибута в виде строкового представления значения даты и времени.
  2. Значение «метаданных», которое указывает тип атрибута.

Значение «метаданных» помогает в сериализации значения атрибута.

9
задан Adam Mitz 22 October 2008 в 00:38
поделиться

6 ответов

Можно использовать Очереди Таймера (http://msdn.microsoft.com/en-us/library/ms686796.aspx). Они не требуют HWND.

15
ответ дан 4 December 2019 в 08:17
поделиться

Можно использовать SetTimer для установки таймера, затем поймать сообщение WM_TIMER в цикле сообщения.

Пример:

//Установите таймер для истечения за 10 секунд

SetTimer (hwnd, IDT_TIMER1, 10000, (TIMERPROC) ПУСТОЙ УКАЗАТЕЛЬ);

... затем в цикле сообщения:

переключатель (wParam)

{ 

    case IDT_TIMER1: 

        // Boom goes the dynamite

Вы можете также decleare функция типа TIMERPROC и иметь это быть названными, когда таймер истекает, если Вы не хотите делать обработку цикла сообщения.

1
ответ дан 4 December 2019 в 08:17
поделиться

Можно отправить основному потоку сообщения WM_TIMER. lParam для сообщения является адресом функции обратного вызова, или можно оставить это ПУСТЫМ и обработать его сами в насосе сообщения.

В этом примере мы отправляем таймер на насос сообщения потока, нет никакого требования, чтобы связать окно с таймером.

UINT timer;

VOID CALLBACK Timer(HWND hwnd,
    UINT uMsg,
    UINT_PTR idEvent,
    DWORD dwTime
)
{
  KillTimer(0, timer);
}

timer=SetTimer(0, // window handle
    0, // id of the timer message, leave 0 in this case
    10000, // millis
    Timer // callback
  );

// pump messages
while (GetMessage) etc...

Обратный вызов Таймера назовет DispatchMessage. Этот вопрос напомнил мне о недавнем ОНТАРИО.

4
ответ дан 4 December 2019 в 08:17
поделиться

Вместо того, чтобы использовать таймеры UI (даже при том, что можно использовать Нулевой системный дескриптор окна как показано г-ном, С 1800 ИНФОРМАЦИЕЙ) можно использовать ядро waitable объекты - таймеры. Посмотрите CreateWaitableTimer в документах API. Их можно затем ожидать - при использовании WaitForSingleObject или WaitForMultipleObjects, и т.д., который особенно полезен, если это уже, как Ваш сервис ожидает внешних событий.

Если это не ясно из той первой ссылки, функция SetWaitableTimer может связать стандартную программу завершения (пользовательский обратный вызов) с таймером. Не забудьте использовать... Исключая версиями WaitForMultipleObjects (и т.д.). так, чтобы поток был в "alertable" состоянии.

5
ответ дан 4 December 2019 в 08:17
поделиться

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

Опрос не является оптимальным способом проверить состояние файла и окажет негативное влияние на производительность системы. В то время как существуют (иногда) проблемы, делающие это по сетям, необходимо проверить http://msdn.microsoft.com/en-us/library/aa364417 (По сравнению с 85) .aspx или http://msdn.microsoft.com/en-us/library/aa365261 (По сравнению с 85) .aspx для того, как сделать это и http://blogs.msdn.com/oldnewthing/archive/2006/01/24/516808.aspx для того, почему Вы должны.

1
ответ дан 4 December 2019 в 08:17
поделиться

Вы просто пытаетесь "проснуться" время от времени, чтобы сделать некоторую работу? Можно всегда использовать Сон ().

Кроме того, у меня обычно есть поток, который находится в некоторое время (1 == 1) цикл со сном внутри. Там я могу проверить на запрос завершения работы и другое misc обслуживание. Вы могли использовать ту систему для щекотки события или взаимного исключения для рабочего потока в приложении.

0
ответ дан 4 December 2019 в 08:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: