Timers (SetTimer and CreateWaitableTimer) in Windows |
||
SetTimerThe following example creates a timer (that is not attached to a window) whose Timer Procedure creates 20 Message Boxes
#include <windows.h> class foo_class { static int counter; public: static void __stdcall timer_proc(HWND,unsigned int, unsigned int, unsigned long) { if (counter++ < 20) MessageBox(0,"Hello","MessageBox",0); else PostQuitMessage(0); } }; int foo_class::counter=0; WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) { int iTimerID = SetTimer(0, 0, 300, foo_class::timer_proc); MSG m; while (GetMessage(&m,0,0,0)) { TranslateMessage(&m); DispatchMessage(&m); } return 1; } CreateWaitableTimerThis example demonstrates how to use Timers in windows. A timer will be set that is signalled for the first time 2 seconds after the first call to CreateWaitableTimer and then is signalled every 3/4th of a second.
#define _WIN32_WINNT 0x0400 #include <windows.h> #include <process.h> #include <stdio.h> unsigned __stdcall TF(void* arg) { HANDLE timer=(HANDLE) arg; while (1) { WaitForSingleObject(timer,INFINITE); printf("."); } } int main(int argc, char* argv[]) { HANDLE timer = CreateWaitableTimer( 0, false, // false=>will be automatically reset 0); // name LARGE_INTEGER li; const int unitsPerSecond=10*1000*1000; // 100 nano seconds // Set the event the first time 2 seconds // after calling SetWaitableTimer li.QuadPart=-(2*unitsPerSecond); SetWaitableTimer( timer, &li, 750, // Set the event every 750 milli Seconds 0, 0, false); _beginthreadex(0,0,TF,(void*) timer,0,0); // Wait forever, while (1) ; return 0; } |
http://www.adp-gmbh.ch/win/misc/timer.html