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

来源:互联网 发布:iphone7屏幕录制软件 编辑:程序博客网 时间:2024/06/05 17:34


 

[cpp] view placopy
  1. // 头文件的定义
  2. #ifndef CTIMER_H_  
  3. #define CTIMER_H_  
  4. #include <Windows.h>  
  5. class CTimer  
  6. {  
  7. public:  
  8.  CTimer();  
  9.  ~CTimer();  
  10.  void StartTimer(unsigned int nElapse);  
  11.  void EndTimer();  
  12.  static DWORD WINAPI ThreadFunc (LPVOID pParam);  
  13. private:  
  14.  unsigned int m_Elapse;  
  15.  HANDLE m_hThread;  
  16. };  
  17. #endif  
  18.    
  19. /********CTimer.cpp***********/  
  20. #include <time.h>  
  21. #include <iostream>  
  22. #include "CTimer.h"  
  23. using namespace std;  
  24. CTimer::CTimer():m_Elapse(0), m_hThread(NULL)  
  25. {  
  26. }  
  27. CTimer::~CTimer()  
  28. {  
  29. }  
  30. void CTimer::StartTimer(unsigned int nElapse)  
  31. {  
  32.  m_Elapse = nElapse;  
  33.  m_hThread = CreateThread(NULL, 0, ThreadFunc, (LPVOID)(&m_Elapse), 0, NULL);  
  34. }  
  35. void CTimer::EndTimer()  
  36. {  
  37.  CloseHandle(m_hThread);  
  38. }  
  39. DWORD WINAPI CTimer::ThreadFunc(LPVOID pParam)  
  40. {  
  41.  time_t t1, t2;  
  42.  double  Diff = 0;  
  43.  int elapse = *((int *)pParam);  
  44.  /*获取系统当前时间*/  
  45.  t1 = time(NULL);  
  46.  while(1)  
  47.  {  
  48.   /*以秒为单位获取系统当前时间*/  
  49.   t2 = time(NULL);  
  50.   /*比较第二次获取的时间与第一次的时间是不是间隔了两秒*/  
  51.   Diff = difftime(t2,t1);  
  52.   /*间隔两秒打印Diff和i*/  
  53.   if((int)Diff == elapse)  
  54.   {  
  55.    cout<<"Time out!"<<endl;  
  56.    t1 = t2;  
  57.   }      
  58.  }  
  59.  return 0;  
  60. }  
  61.    
  62. /********测试程序************/  
  63. #include "CTimer.h" 
  64. #include <stdio.h>

  65. int main()  
  66. {  
  67.  CTimer timer;  
  68.  timer.StartTimer(1);  
  69.   
  70.  Sleep(8000);  
  71.  timer.EndTimer();  
  72.  return 0;
  73. }  

原创粉丝点击