这个定时器为什么只能运行一次程序就退出了?

swordbroken 2004-04-12 01:16:45
#include "stdafx.h"

#define ID_TIMER_CHECKTIME 1

INT CheckTime();

VOID CALLBACK TimerProc(
HWND hwnd, // handle to window
UINT uMsg, // WM_TIMER message
UINT_PTR idEvent, // timer identifier
DWORD dwTime // current system time
)
{
CheckTime();
}

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
::SetTimer(NULL,ID_TIMER_CHECKTIME,3000,(TIMERPROC)TimerProc);

MSG msg;
if (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
KillTimer(NULL,ID_TIMER_CHECKTIME);

return 0;
}



// Check the system time
// if 0:00 - 5:00 then do something
INT CheckTime()
{
SYSTEMTIME st;

GetLocalTime(&st);

if (st.wHour >= 0 && st.wHour < 5)
{
MessageBox(NULL,"test","test",MB_OK);
return -1;
}
else
return 0;
}
...全文
73 点赞 收藏 7
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
park99 2004-04-12
得到一个消息处理完了就退出了,应该循环处理所有的消息!
回复
HanZhu1 2004-04-12
缺少消息循环
回复
UDX协议 2004-04-12
if (GetMessage(&msg,NULL,0,0)) ->while (GetMessage(&msg, NULL, 0, 0))
回复
快乐鹦鹉 2004-04-12
应该有消息循环。
回复
swordbroken 2004-04-12
呵呵,没想到我把while写成if了,晕……

谢谢各位了!
回复
w3guy 2004-04-12
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
回复
swordbroken 2004-04-12
不知道为什么上面的程序TimerProc只能运行一次,然后程序进程就退出了。
我的意思是想程序一直运行下去的呀
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告