//************************************************************************************//本程式使用了兩種實現定時的方法,都是基於API的,而不是MFC//// 1. 是使用線程定時休眠的方法,啟動線程ThreadProc,線上程中輸出,然後Sleep 1000ms// // 2. 使用定時器方法,設定一個1000ms的定時器(SetTimer),然後捕捉該訊息,然後調用回呼函數// TimerProc,在該函數中輸出DEF,注意,SetTimer可以直接寫回呼函數地址,不必捕捉訊息。// 3. 本例子已經很詳細了。// 4. 祝你好運。////************************************************************************************#include "stdafx.h"#include <windows.h>DWORD WINAPI ThreadProc( LPVOID lpParameter )//方法1{static DWORD tick=0;DWORD tmp = GetTickCount();while(1){ tick = GetTickCount()-tmp;//獲得系統從啟動開始到現在的ms數tmp = GetTickCount();printf("THREAD_PROC: abc %d, tickcount: %d\n",tick,tmp);//列印abc和上次列印到這次列印之間的毫秒間隔。Sleep(1000);//每隔1000ms列印abc}}VOID TimerProc()//方法2{ static DWORD tick=0;static DWORD tmp = GetTickCount(); tick = GetTickCount()-tmp;tmp = GetTickCount();printf(" TimerProc________________def %d\n",tick);}int main(){DWORD dwthread; ::CreateThread(NULL,0,ThreadProc,(LPVOID)0,1024,&dwthread);//產生一個線程,在該線程裡每1000ms輸出一個"abc",然後SLEEPSetTimer(0,0,1000,0);//設定一個定時器,定時器的回呼函數為0,僅產生定時器訊息,在main函數裡捕捉該訊息MSG msg;bool flag; while(1)//該迴圈捕捉定時器訊息,並且防止main函數退出{PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE); while( (flag = GetMessage( &msg, NULL, 0, 0 )) != 0) { if (flag == -1) { // handle the error and possibly exit } else if(msg.message==WM_TIMER) { TimerProc();//如果是定時器訊息,調用timerproc } else { TranslateMessage(&msg); DispatchMessage(&msg); } } }}