Win32范例1:
在当前进程内创建一个延时1s的定时器,定时器ID为SetTimer的返回值。使用GetMessage捕获WM_TIMER 消息。
#include <stdio.h>
#include <time.h>
#include <Windows.h>
int main(void) {
UINT_PTR timeID = SetTimer(NULL, 0, 1000, NULL);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
if (WM_TIMER == msg.message && timeID == msg.wParam) {
printf("timeID=%d, time=%d\n", timeID, (int)time(NULL));
}
}
KillTimer(NULL, timeID);
return 0;
}
结果:
Win32范例2:
使用回调处理定时器消息。
#include <stdio.h>
#include <time.h>
#include <Windows.h>
VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) {
if (WM_TIMER == uMsg) {
printf("hand=%#p, uMsg=%u, idEvent=%u, dwTime=%lums\n", hwnd, uMsg, idEvent, dwTime);
}
}
int main(void) {
UINT_PTR timeID = SetTimer(NULL, 0, 1000, TimerProc);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
DispatchMessage(&msg);
}
KillTimer(NULL, timeID);
return 0;
}
结果:
MFC范例:
创建一个ID为123的定时器,延时6s。使用默认的消息处理函数OnTimer处理定时器消息。
#define TIME_ID 123
BOOL xxx::OnInitDialog()
{
CDialog::OnInitDialog();
SetTimer(TIME_ID, 6000, NULL);
return TRUE;
}
void xxx::OnClose()
{
KillTimer(TIME_ID);
CDialog::OnClose();
}
void xxx::OnTimer(UINT_PTR nIDEvent)
{
// 定时器消息响应函数
CDialog::OnTimer(nIDEvent);
}

3630

被折叠的 条评论
为什么被折叠?



