📄 htimer.h
字号:
#if !defined(AFX_HTIMER_H__1A30C49A_0835_4DBA_98FE_B5A07CFB8AF1__INCLUDED_)
#define AFX_HTIMER_H__1A30C49A_0835_4DBA_98FE_B5A07CFB8AF1__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//////////////////////////////////////////////////////////////////////////////
//文件名 : HTimer.h
//功能 :用线程和事件对象模拟一个定时器,应用于Windows 和 Linux两种系统
//创建/修改日期 : 2003.11.27
//作者 : 韩国静
//
#include "HEvent.h"
typedef void (*PTIMERPROC)(void *);
class CHTimer
{
void *m_TimeParam;
UNI_BOOL m_bStop;
UNI_DWORD m_dwWaitCount;
CHEvent m_Wait;
UNI_ThreadHandle m_hThread;
PTIMERPROC m_pOnTimer;
// void (*m_pOnTimer)(UNI_DWORD);
private:
static UNI_THREADPROC TimerThread(void *pParam)
{
void *dwParam;
UNI_DWORD dwTimeCount;
CHTimer *pThis=(CHTimer*)pParam;
if(pParam)
{
dwParam=pThis->m_TimeParam;
dwTimeCount=pThis->m_dwWaitCount;
while(pThis->m_bStop==UNI_FALSE)
{
pThis->m_Wait.WaitEvent(dwTimeCount);
if(pThis->m_bStop)
break;
pThis->m_pOnTimer(dwParam);
}
}
UNI_ExitThread(0);
};
public:
//
void KillTimer()
{
if(m_bStop==UNI_FALSE)
{
m_bStop=UNI_TRUE;
m_Wait.SetEvent();
UNI_WaitCloseThread(this->m_hThread);
this->m_Wait.CloseEvent();
}
};
//
UNI_BOOL CreateTimer(UNI_DWORD dwTimeCount,PTIMERPROC pOnTimer,void * dwParam)
{
UNI_ThreadID ThreadId;
if(dwTimeCount==0||dwTimeCount==(UNI_DWORD)-1||pOnTimer==UNI_NULL)
return UNI_FALSE;
if(this->m_Wait.CreateEvent())
{
this->m_dwWaitCount=dwTimeCount;
this->m_bStop=UNI_FALSE;
this->m_pOnTimer=pOnTimer;
this->m_TimeParam =dwParam;
if(UNI_CreateThread(TimerThread,this,&this->m_hThread,&ThreadId)==UNI_TRUE)
{
return UNI_TRUE;
}
m_bStop=UNI_TRUE;
m_Wait.SetEvent();
m_Wait.CloseEvent();
}
return UNI_FALSE;
};
//////////////////// 构造和析构 /////////////////////////////////
CHTimer()
{
m_bStop=UNI_TRUE;
m_TimeParam=0;
};
virtual ~CHTimer(){};
};
#endif // !defined(AFX_HTIMER_H__1A30C49A_0835_4DBA_98FE_B5A07CFB8AF1__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -