一个简单的Symbian OS异步计时器
来源:互联网 发布:安卓编程入门教程视频 编辑:程序博客网 时间:2024/05/21 15:46
呵呵,第一次在Blog上写东西,不说紧张吧,但许多东西却是不知怎么写,慢慢来吧,请同行的各位前辈以后多执教!
前几天写了由于要写一个录音和回放的程序,所以要使用到计时器;但一开始用的是同步计时器,结果发现出现了许多问题,因为同步计时器启动的时候,会屏蔽所有的用户命令;真是很郁闷。以前就有人建议我写一个简单的异步计数器,但当时决觉得太麻烦(其实是对Symbian C++的知识了解不够),一直托了下来。现在看来是麻烦要写,不麻烦也要写了。
先看一些资料吧,尤其是SDK里面自带的例子,很有用的,其实异步计时器并不向一开始想象的那么复杂。基本思想:写一个类继承CTimer,然后重写它的RunL()和DoCancel()方法;在需要的地方启动计时器,然后在Runl()方法里处理计时结束的任务,或在DoCancel()里面取消计时。注意由于CTimer从CActive继承而来,所以在实现计时器的构造函数里面要给它指定优先级。当然,为了便于管理各个类,最好再实现一个检测计时器的M类。
闲话就不说了,下面是我的计时器的代码。
//一个简单的异步计时器。
//-----.h
#ifndef __TIMEOUTTIMER_H__
#define __TIMEOUTTIMER_H__
// INCLUDES
#include <e32base.h>
class MTimeOutNotifier;
// CLASS DECLARATION
class CTimeOutTimer : public CTimer
{
public: // Constructors and destructors
static CTimeOutTimer* NewL( const TInt aPriority,MTimeOutNotifier& aTimeOutNotify);
static CTimeOutTimer* NewLC( const TInt aPriority,MTimeOutNotifier& aTimeOutNotify);
virtual ~CTimeOutTimer();
protected: // Functions from base classes
void RunL();
private: // Constructors and destructors
CTimeOutTimer( const TInt aPriority,MTimeOutNotifier& aTimeOutNotify);
void ConstructL();
private://data
MTimeOutNotifier& iNotify;
};
#endif // __TIMEOUTTIMER_H__
//----------.cpp
// INCLUDE FILES
#include <aknnotewrappers.h>
#include "TimeOutTimer.h"
#include "TimeOutNotifier.h"
// ========================= MEMBER FUNCTIONS ==================================
// -----------------------------------------------------------------------------
// CTimeOutTimer::NewL()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CTimeOutTimer* CTimeOutTimer::NewL( const TInt aPriority ,MTimeOutNotifier& aTimeOutNotify)
{
CTimeOutTimer* self = CTimeOutTimer::NewLC( aPriority, aTimeOutNotify);
CleanupStack::Pop( self );
return self;
}
// -----------------------------------------------------------------------------
// CTimeOutTimer::NewLC()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CTimeOutTimer* CTimeOutTimer::NewLC( const TInt aPriority ,MTimeOutNotifier& aTimeOutNotify)
{
CTimeOutTimer* self = new ( ELeave ) CTimeOutTimer( aPriority, aTimeOutNotify);
CleanupStack::PushL( self );
self->ConstructL();
return self;
}
// -----------------------------------------------------------------------------
// CTimeOutTimer::CTimeOutTimer()
// C++ default constructor can NOT contain any code, that might leave.
//learn about member initialization list first!
// -----------------------------------------------------------------------------
//
CTimeOutTimer::CTimeOutTimer( const TInt aPriority,
MTimeOutNotifier& aTimeOutNotify )
: CTimer( aPriority ), iNotify( aTimeOutNotify )
{
// No implementation required
}
// -----------------------------------------------------------------------------
// CTimeOutTimer::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CTimeOutTimer::ConstructL()
{
CTimer::ConstructL();
CActiveScheduler::Add( this );
}
// -----------------------------------------------------------------------------
// CTimeOutTimer::~CTimeOutTimer()
// Destructor.
// -----------------------------------------------------------------------------
//
CTimeOutTimer::~CTimeOutTimer()
{
// No implementation required
}
// -----------------------------------------------------------------------------
// CTimeOutTimer::RunL()
// Called when operation completes.
// -----------------------------------------------------------------------------
//
void CTimeOutTimer::RunL()
{
// Timer request has completed, so notify the timer's owner
CAknConfirmationNote* note=new(ELeave)CAknConfirmationNote();
note->ExecuteLD(_L("TimeOut!"));
iNotify.TimerExpired();
}
//关于类MTimeOutNotifier的定义
//------.h
#ifndef __TIMEOUTNOTIFIER_H__
#define __TIMEOUTNOTIFIER_H__
// CLASS DECLARATION
/**
* MTimeOutNotifier
* This class specifies the function to be called when a timeout occurs.
* Used in conjunction with CTimeOutTimer class.
*/
class MTimeOutNotifier
{
public: // New functions
/**
* TimerExpired.
* The function to be called when a timeout occurs.
*/
virtual void TimerExpired() = 0;
};
#endif // __TIMEOUTNOTIFIER_H__
- 一个简单的Symbian OS异步计时器
- 一个简单的Symbian OS异步计时器
- Symbian OS的硬件——计时器
- 一个简单的计时器
- 一个简单的计时器
- 一个简单的计时器
- 一个python简单的计时器
- 一个简单的倒计时计时器
- 一个简单的计时器类
- 一个简单的进程计时器
- 一个简单的倒数计时器
- 实现一个简单的计时器
- symbian OS 简单介绍
- Python学习-一个简单的计时器
- 分享一个简单实用的前台计时器
- Python 简单的定制一个计时器
- 实现一个很简单的计时器类
- 一个简单地计时器。
- 害怕
- How To Build a Yacc
- 编译结束时the .plg file has been modified outside of the source editor错误消息提示
- SQL教程随看随记(一)
- 想到的.....
- 一个简单的Symbian OS异步计时器
- ASP.NET Introduction
- 修改jsp
- 查询JSP
- 保存JSP
- DAO
- 又是星期日
- 西行漫记(1):班加罗尔印象
- BL