C++中利用多线程实现定时器
2008-07-29 10:39
645 查看
使用多线程技术实现了一个简单的定时器类:
/********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();
}
/********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();
}
相关文章推荐
- C++中利用多线程实现定时器
- C++中利用多线程实现定时器
- C++中利用多线程实现定时器
- 利用 C++ 11 特性实现多线程计数器
- c++利用winapi实现简单多线程
- 利用C++ 11特性实现多线程计数器
- 利用Boost实现高度可移植的多线程C++程序
- 利用 C++ 11 特性实现多线程计数器
- epoll定时器实现系列文章:linux c++ 利用timerfd和epoll封装计时器(Timer)类
- 利用PPL实现复杂的多线程模式的生产者-消费者
- 利用多线程和信号量,互斥量实现的经典的生产者与消费者模型
- C++实现矩阵链乘法利用动态规划及运行实例结果
- [转]利用Socket实现C++与Flex通信
- 在C++中利用反射和简单工厂模式实现业务模块解耦
- Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- 利用iphone的多线程实现“售票系统”(手把手教你iphone开发 - 基础篇)
- 利用C++重载实现类似“类成员指针”的功能
- C++中利用List容器实现快速排序
- C++利用模板实现队列
- 高精度加法——C++实现_利用数组