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

📄 ctimer.cpp

📁 《脚本驱动的应用软件开发方法与实践》源码
💻 CPP
字号:
//
// CTimer.cpp
//
// --------------------------------------------------------
// A Practical Guide to Script-Driven Software Development
// Author: Qiming Lu                        Date: 6/1/2006
// MSN Messager: luqiming26@hotmail.com
// MSN Blog: http://spaces.msn.com/jemylu
// --------------------------------------------------------

#include "stdafx.h"
#include "CTimer.h"

/////////////////////////////////////////////////////////////////////////////////////////
CTimer::CTimer(ITypeLib* ptl, UINT interval, BOOL autoReset, IDispatch* pProc)
	: mInterval(interval)
	, mAutoReset(autoReset)
	, mDispatcher(pProc)
	, mEnabled(true)
	, mInited(false)
	, mHeadTick(0)
{
	LoadTypeInfo(ptl);
}

CTimer::~CTimer()
{
}

// APIs exposed to scripts
STDMETHODIMP CTimer::get_enabled(BOOL* pRet)
{
	*pRet = mEnabled;
	return S_OK;
}

STDMETHODIMP CTimer::put_enabled(BOOL pVal)
{
	mEnabled = pVal;
	if (mEnabled)
	{
		mInited = false; // Need re-initialization.
	}
	return S_OK;
}

STDMETHODIMP CTimer::get_interval(UINT* pVal)
{
	*pVal = mInterval;
	return S_OK;
}

// Note: A tick is generated every 100ms.
void CTimer::ProcessTicks(long ticks)
{
	if (!mEnabled)
		return;

	// Do initialization.
	if (mInited)
	{
		mInited = true;
		mHeadTick = ticks; // Save the first tick.
		return;
	}

	if (UINT(ticks - mHeadTick) * 100 >= mInterval)
	{
		// Execute the timer procedure.
		mDispatcher.Invoke(0);

		// Update the head tick for next interval.
		mHeadTick = ticks;

		if (!mAutoReset)
			mEnabled = false;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -