C++中利用多线程实现定时器

时间:2021-06-08 00:10:11

     使用多线程技术实现了一个简单的定时器类:

            

        /********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();
}