Вы можете использовать функцию SetTimer()
напрямую, используя Win32 API, и без использования каких-либо классов-оболочек (MFC и т. Д.).
Имейте в виду, что эти окнатаймеры работают с циклом событий GUI.Если вы не обрабатываете события с использованием функций GetMessage()
или PeekMessage()
, по истечении таймера вы не получите уведомление.Вам также необходимо создать окно, к которому будет привязан таймер (сообщение WM_TIMER
будет сообщено в процедуре окна этого окна .
ПроверкаИзучите документацию для GetMessage()
, чтобы узнать, как написать цикл обработки событий. Также взгляните на « Создание таймера », чтобы узнать, как обрабатывать * 1025.* сообщение.
Редактировать: Обзор необходимых шагов
- Создать процедуру окна : Пример приведен ниже.
- Зарегистрируйте класс окна : определите класс окна и установите для оконной процедуры указанную выше функцию. Используйте функцию
RegisterClass()
для регистрации структуры. - Создание окна : Используйте функцию
CreateWindow()
, чтобы создать окно только что зарегистрированного класса. - Запустите цикл обработки событий : Использоватьфункция
GetMessage()
для обработки сообщений. Вызов DispatchMessage()
в этом цикле перенаправит события WM_TIMER
на вашокно процедуры, и вы можете обработать сообщение оттуда.
Шаги 1, 2 и 3 должны быть частью вашей функции WinMain()
.Вот краткий обзор основных шагов (намеренно неполный, проверьте документацию, чтобы знать, как обрабатывать ошибки и очистить):
LRESULT __stdcall MyWindowProcedure
( HWND window, UINT message, WPARAM wparam, LPARAM lparam )
{
if (message == WM_TIMER) {
// timer elapsed.
}
return DefWindowProc(window, message, wparam, lparam);
}
int __stdcall WinMain ( HINSTANCE application, HINSTANCE, LPSTR, int )
{
::WNDCLASS klass;
// ...
klass.lpfnWndProc = &MyWindowProcedure;
RegisterClass(&klass);
// ...
HWND window = CreateWindow(klass.lpszClassName, ...);
// ...
const DWORD SECOND = 1000;
const DWORD MINUTE = 60 * SECOND;
UINT_PTR timer = SetTimer(window, 0, 2*MINUTE, 0);
// ...
MSG message;
while (GetMessage(&message, window, 0, 0) > 0)
{
TranslateMessage(&message);
DispatchMessage(&message);
}
// ...
}