win32中实现定时器功能

来源:互联网 发布:java读取日志文件处理 编辑:程序博客网 时间:2024/05/13 16:37
1.SetTimer:在控制台应用程序中同样可以用SetTimer实现定时器的效果。
示例代码:

#include<iostream>#include<windows.h>using namespace std;void CALLBACK TimeProc( HWND hwnd, UINT message, UINT idTimer, DWORD dwTime);int main(){ SetTimer(NULL,1,1000,TimeProc); MSG msg; while(GetMessage(&msg,NULL,0,0)) { if(msg.message==WM_TIMER) { DispatchMessage(&msg); } } return 0;} void CALLBACK TimeProc( HWND hwnd, UINT message, UINT idTimer, DWORD dwTime) { cout<<"触发定时器!"<<endl; }

此程序每过一秒显示一次“触发定时器!”。
2.线程+SetTimer:网上牛人用线程做的相同效果

#include <windows.h> #include <stdio.h> #include <conio.h> int count =0; VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime){ count++; printf("WM_TIMER in work thread count=%d\n",count); }DWORD CALLBACK Thread(PVOID pvoid) { MSG msg; PeekMessage(&msg,NULL,WM_USER,WM_USER,PM_NOREMOVE); UINT timerid=SetTimer(NULL,111,1000,TimerProc); BOOL bRet; while( (bRet = GetMessage(&msg,NULL,0,0))!= 0) { if(bRet==-1) { // handle the error and possibly exit } else { TranslateMessage(&msg); DispatchMessage(&msg); } } KillTimer(NULL,timerid); printf("thread end here\n"); return 0; }int main() { DWORD dwThreadId; printf("use timer in workthread of console application\n"); HANDLE hThread = CreateThread(NULL,0,Thread,0,0,&dwThreadId); getch(); return 0;}

3.timeSetEvent。 Windows多媒体高精度定时器。
函数:MMRESULT timeSetEvent( UINT uDelay, 
                               UINT uResolution, 
                                LPTIMECALLBACK lpTimeProc, 
                                WORD dwUser, 
                                UINT fuEvent )
说明:    
uDelay:以毫秒指定事件的周期。

        Uresolution:以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为1ms。
        LpTimeProc:指向一个回调函数。
        DwUser:存放用户提供的回调数据。
        FuEvent:指定定时器事件类型:
        TIME_ONESHOT:uDelay毫秒后只产生一次事件
        TIME_PERIODIC :每隔uDelay毫秒周期性地产生事件。 

#include<iostream>#include<windows.h>#include <Mmsystem.h>#pragma comment(lib, "winmm.lib")using namespace std;void CALLBACK TimeProc( UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2 ) { cout<<"定时器触发!"<<endl; } int main(){ timeSetEvent( 1000,0, TimeProc, 0, (UINT)TIME_PERIODIC); getchar();}

注:这段代码在dev c++下无法编译运行,在visual studio 2010下可以运行通过。

4.clock。用于延迟显示。

#include <stdio.h>#include <time.h>#include<windows.h>int main(void){ clock_t start, end; start = clock(); Sleep(2000); end = clock(); printf("The time was: %d\n", (end - start) / CLK_TCK);//注意是%d system("pause"); return 0;}

0 0