方式一:在控制台下或者没有窗口的地方使用时:
示例代码:
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
{
SYSTEMTIME sys;
GetLocalTime( &sys );
printf( "M/d/d d:d:d.d xingqi \n",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek);
}
void main()
{
MSG msg;
SetTimer(NULL,230,4000,(TIMERPROC)TimerProc);
while(GetMessage(&msg,NULL,NULL,NULL))
{
if (msg.message == WM_TIMER)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
break; //此处最好有一个这个,不然貌似Killtimer结束不了定时器的样子.
}
}
KillTimer(NULL,230);
}
教训: 刚开始的时候以为不用设置消息循环,所以没有写循环,结果执行程序就直接退出了。
方式二:
利用MFC提供的消息机制,主要使用到的是下面两个函数.
WINUSERAPI
UINT_PTR
WINAPI
SetTimer(
__in_opt HWND hWnd,
__in UINT_PTR nIDEvent,
__in UINT uElapse,
__in_opt TIMERPROC lpTimerFunc); //将它设定为NULL,也就是使用系统默认的回调函数
WINUSERAPI
BOOL
WINAPI
KillTimer(
__in_opt HWND hWnd,
__in UINT_PTR uIDEvent);
如果调用SetTimer函数时最后一个参数为NULL,则通过WM_TIMER的消息处理函数来处理定时事件。添加WM_TIMER消息的处理函数的方法是,在VS2010工程的Class View类视图中找到要添加定时器的类,点击右键,选择Properties,显示其属性页,然后在属性页工具栏上点击Messages按钮,下面列表就列出了所有消息,找到WM_TIMER消息,添加消息处理函数。
注:如果只有单个SetTimer定时器,可以在函数处理过程中响应WM_TIMER消息,从而添加消息处理代码.
联系人:徐经理
手机:13907330718
电话:0731-22222718
邮箱:hniatcom@163.com
地址: 湖南省株洲市石峰区联诚路79号轨道智谷2号倒班房6楼603室