使用多线程技术实现了一个简单的定时器类:
/********CTimer.h***********/
#ifndef CTIMER_H_
#define CTIMER_H_#include <Windows.h>
class CTimer
{
public:
CTimer();
~CTimer();void StartTimer(unsigned int nElapse);
void EndTimer();static DWORD WINAPI ThreadFunc (LPVOID pParam);
private:
unsigned int m_Elapse;
HANDLE m_hThread;
};
#endif
/********CTimer.cpp***********/
#include <time.h>
#include <iostream>
#include "CTimer.h"using namespace std;
CTimer::CTimer():m_Elapse(0), m_hThread(NULL)
{}
CTimer::~CTimer()
{}
void CTimer::StartTimer(unsigned int nElapse)
{
m_Elapse = nElapse;
m_hThread = CreateThread(NULL, 0, ThreadFunc, (LPVOID)(&m_Elapse), 0, NULL);
}void CTimer::EndTimer()
{
CloseHandle(m_hThread);
}DWORD WINAPI CTimer::ThreadFunc(LPVOID pParam)
{
time_t t1, t2;
double Diff = 0;
int elapse = *((int *)pParam);/*获取系统当前时间*/
t1 = time(NULL);while(1)
{
/*以秒为单位获取系统当前时间*/
t2 = time(NULL);/*比较第二次获取的时间与第一次的时间是不是间隔了两秒*/
Diff = difftime(t2,t1);/*间隔两秒打印Diff和i*/
if((int)Diff == elapse)
{
cout<<"Time out!"<<endl;
t1 = t2;
}
}
return 0;
}
/********测试程序************/
#include "CTimer.h"
void main()
{
CTimer timer;
timer.StartTimer(1);
Sleep(8000);
timer.EndTimer();
}