?? mytimer.cpp
字號:
// 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 + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -