⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctimerimpdrvnt.cpp

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 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 + -