这几天在用MFC做有关定时器的东西,发现MFC自带的定时器方式SetTimer方式不适合用于频繁重新计时的方式,过多地Stop和SetTimer程序会死掉,因此,自已用线程的方式做了一个定时器类:
#pragma once
#include "afxwin.h"
#define ONESHOT 0
#define PERIOD 1
typedef int (*tp_ontimer)(void *param);
class CTboxTimer
{
public:
CTboxTimer(void);
~CTboxTimer(void);
protected:
DWORD m_start_tick;
UINT m_timeout;
public:
static UINT CounterThread(void * param);
protected:
bool m_run_flag;
public:
void init(int mode,int timeout, tp_ontimer handle,void *param);
protected:
tp_ontimer m_onhandle;
public:
void init(void);
void SetTimeouet(int timeout);
void SetOnhandle(tp_ontimer handle,void *param);
protected:
CWinThread *m_thread;
public:
int Start(void);
void Stop(void);
void Restart(void);
protected:
void *m_param;
int m_mode;
};
#include "StdAfx.h"
#include "TboxTimer.h"
CTboxTimer::CTboxTimer(void)
: m_start