ctimerimpdrvnt.cpp
来自「可以实现对邮件的加密解密以及签名」· C++ 代码 · 共 93 行
CPP
93 行
/*____________________________________________________________________________
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 + =
减小字号Ctrl + -
显示快捷键?