📄 ctimerimpdrvnt.cpp
字号:
/*____________________________________________________________________________
Copyright (C) 2002 PGP Corporation
All rights reserved.
$Id: CTimerImpDrvNT.cpp,v 1.3 2002/08/06 20:10:51 dallen Exp $
____________________________________________________________________________*/
#include "pgpClassesConfig.h"
#include "CTimerImpDrvNT.h"
_USING_PGP
// Class CTimerImpDrvNT member functions
CTimerImpDrvNT::~CTimerImpDrvNT()
{
if (IsTimerRunning())
StopTimer();
}
CComboError
CTimerImpDrvNT::StartTimer(
CTimer::CallbackFunc timerCallback,
void *userData,
PGPUInt32 msInterval,
PGPBoolean isPeriodic)
{
pgpAssert(!IsTimerRunning());
pgpAssertAddrValid(timerCallback, CTimer::CallbackFunc);
CComboError error;
mTimerCallback = timerCallback;
mUserData = userData;
mMsInterval = msInterval;
mIsPeriodic = isPeriodic;
LARGE_INTEGER dueTime = RtlConvertUlongToLargeInteger(
-static_cast<PGPInt32>(
msInterval * (PFLConstants::kHundredNsPerSec / 1000)));
KeInitializeDpc(&mTimerDpc, TimerCallback, this);
KeInitializeTimer(&mTimer);
if (isPeriodic)
KeSetTimerEx(&mTimer, dueTime, msInterval, &mTimerDpc);
else
KeSetTimerEx(&mTimer, dueTime, 0, &mTimerDpc);
mIsTimerRunning = TRUE;
return error;
}
void
CTimerImpDrvNT::StopTimer()
{
pgpAssert(IsTimerRunning());
KeCancelTimer(&mTimer);
mIsTimerRunning = FALSE;
mTimerCallback = NULL;
mUserData = NULL;
}
void
CTimerImpDrvNT::TimerCallbackAux()
{
if (!IsPeriodic())
{
mIsTimerRunning = FALSE;
mTimerCallback = NULL;
mUserData = NULL;
}
mTimerCallback(mUserData);
}
VOID
CTimerImpDrvNT::TimerCallback(
PKDPC Dpc,
PVOID DeferredContext,
PVOID SystemArgument1,
PVOID SystemArgument2)
{
CTimerImpDrvNT *pImp = static_cast<CTimerImpDrvNT *>(
DeferredContext);
pgpAssertAddrValid(pImp, CTimerImpDrvNT);
pImp->TimerCallbackAux();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -