mytimer.cpp
来自「实现了无线传感器网络中的一个路由协议算法。」· C++ 代码 · 共 148 行
CPP
148 行
// MyTimer.cpp: implementation of the CMyTimer class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SimSensor.h"
#include "MyTimer.h"
#include "MsgCenter.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//IMPLEMENT_DYNCREATE(CMyTimer, CObject)
CMyTimer::CMyTimer()
{
m_pNode = NULL;
m_DelayTime = 0;
m_hTimer = NULL;
m_TimeType = TRUE;
m_StartTime = 0;
m_TimeCha = 0;
m_Stop = FALSE;
}
CMyTimer::~CMyTimer()
{
}
void CMyTimer::SendTimerMsg(LPVOID pNode, UINT MsgType)
{
CMsg *pMsg ;
pMsg = new CMsg;
pMsg->Type = MsgType; //collectdata Msg
((CNode *)pNode)->MsgBuff.InsertMsg(pMsg);
}
DWORD WINAPI CMyTimer::TimerProc(LPVOID lpParam)
{
CMyTimer *pTimer = (CMyTimer *)lpParam;
CNode *pNode = (CNode *)(pTimer->m_pNode);
if (pNode == NULL || !pNode->IsKindOf(RUNTIME_CLASS(CNode))) return 0; // if pObject is not valid
if ( ONCE == pTimer->m_TimeType ) {
//while(1) {
// if ( TRUE == pTimer->m_Stop ) {
// pTimer->m_Stop = FALSE;
// break;
// }
pTimer->m_StartTime = GetTickCount();
do {
if ( TRUE == pTimer->m_Stop ) {
pTimer->m_Stop = FALSE;
break;
}
Sleep(1);
pTimer->m_TimeCha = GetTickCount() - pTimer->m_StartTime;
}while (pTimer->m_TimeCha < pTimer->m_DelayTime );
pTimer->m_TimeCha = 0;
//::MessageBox(NULL,"Timer ONCE arrived!","hehe",MB_OK);
pTimer->SendTimerMsg(pNode,100);
//pTimer->StopTimer();
//}
return 1;
}else{
while(1) {
if ( TRUE == pTimer->m_Stop ) {
pTimer->m_Stop = FALSE;
break;
}
pTimer->m_StartTime = GetTickCount();
do {
Sleep(1);
pTimer->m_TimeCha = GetTickCount() - pTimer->m_StartTime;
}while ( pTimer->m_TimeCha < pTimer->m_DelayTime );
pTimer->m_TimeCha = 0;
//::MessageBox(NULL,"Timer CONTINUE arrived!","hehe",MB_OK);
pTimer->SendTimerMsg(pNode,101);
}
return 2;
}
}
BOOL CMyTimer::SetMyTimer(DWORD Time,UINT TimeType)
{
m_DelayTime = Time;
m_TimeType = TimeType;
m_hTimer=::CreateThread(NULL,0,TimerProc,(LPVOID)(this),0,NULL);
if ( m_hTimer!=NULL ) {
SetThreadPriority(m_hTimer,THREAD_PRIORITY_HIGHEST);
return TRUE;
}else{
//TRACE("Timer Set Fail!\n");
MessageBox(NULL,"Timer Set Fail!","warning!",MB_OK);
return FALSE;
}
}
BOOL CMyTimer::EndTimer()
{
DWORD RetCode;
if (!GetExitCodeThread(m_hTimer,&RetCode)) return FALSE;
if (STILL_ACTIVE!=RetCode) return TRUE;
m_Stop = TRUE;
if (m_TimeType == ONCE) ContinueTimer();
if ( m_Stop==FALSE )
return TRUE;
else
return FALSE;
}
BOOL CMyTimer::StopTimer()
{
if (0xFFFFFFFF == SuspendThread(m_hTimer))
return FALSE;
else
return TRUE;
}
BOOL CMyTimer::ContinueTimer()
{
if (0xFFFFFFFF == ResumeThread(m_hTimer))
return FALSE;
else
return TRUE;
}
VOID CMyTimer::BandNode(LPVOID pNode)
{
m_pNode = pNode;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?