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

            

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

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-01
  • 2022-01-07
  • 2021-11-05
  • 2022-12-23
  • 2021-07-03
  • 2021-09-27
猜你喜欢
  • 2021-07-11
  • 2022-12-23
  • 2022-12-23
  • 2021-09-05
  • 2022-12-23
  • 1970-01-01
相关资源
相似解决方案