18,363
社区成员




// TimerClass.cpp: implementation of the TimerClass class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "TimerClass.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
TimerClass::TimerClass()
{
TimerEvent = NULL;
State = FALSE;
Interval = 1000;
}
TimerClass::~TimerClass()
{
}
void TimerClass::Play()
{
if(State==FALSE){
State = TRUE;
ThreadHandle = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)TimerThread,this,0,&ThreadID);
}
}
void TimerClass::Stop()
{
if(State == TRUE){
State=FALSE;
CloseHandle(ThreadHandle);
}
}
DWORD WINAPI TimerClass::TimerThread(LPVOID pParam)
{
DWORD NowTickCount;
DWORD SaveTickCount;
TimerClass * TimerObj;
TimerObj = (TimerClass *)pParam;
NowTickCount = GetTickCount();
SaveTickCount = NowTickCount;
while(TRUE){
Sleep(TimerObj->Interval);
if(TimerObj->State==FALSE){
break;
}
if(TimerObj->TimerEvent!=NULL){
TimerObj->TimerEvent();
}
}
return 0;
}
// TimerClass.h: interface for the TimerClass class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_TIMERCLASS_H__C550E3B3_80DE_43B9_AD4E_0136C4870720__INCLUDED_)
#define AFX_TIMERCLASS_H__C550E3B3_80DE_43B9_AD4E_0136C4870720__INCLUDED_
typedef void(*CTIMEREVENT)();
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class TimerClass
{
public:
void Stop();
void Play();
DWORD Interval;
CTIMEREVENT TimerEvent;
TimerClass();
virtual ~TimerClass();
private:
HANDLE ThreadHandle;
BOOL State;
DWORD ThreadID;
protected:
static DWORD WINAPI TimerThread(LPVOID pParam);
};
#endif // !defined(AFX_TIMERCLASS_H__C550E3B3_80DE_43B9_AD4E_0136C4870720__INCLUDED_)
#include "stdafx.h"
#include "TimerClass.h"
MCTimerClass Timer1;
static void Timer1_Time(LONG ClassID);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
//...
Timer1.ClassID = (LONG)this; // 为 Timer1_Time 传递的参数,任何值都可以
Timer1.TimerEvent = Timer1_Time; // 相当于处理TimerEvent事件的函数指针
Timer1.Interval = 100; // 间隔时间,以毫秒为单位
Timer1.Play(); // 开始触发定时器
//...
}
// 根据上面的设置,每隔100毫秒触发一次该过程,并将 Timer1.ClassID 的值传递给 ClassID 参数
void Timer1_Time(LONG ClassID)
{
//定时器事件处理过程
}