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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值