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

📄 chxavcallback.cpp

📁 symbian 下的helix player源代码
💻 CPP
字号:
/************************************************************************
 * chxavcallback.cpp
 * -----------------
 *
 * Synopsis:
 * Encapsulates single or periodic timer callback
 *
 *
 * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
 *
 ************************************************************************/

// Symbian includes...
#include "hxtypes.h"
#include "hxassert.h"

// Includes from this project...
#include "chxavmisc.h"
#include "chxavutil.h"
#include "chxavcallback.h"
#include "chxavcommand.h"
#include "hxsym_leaveutil.h"

////////////////////////////////////////////
//
CHXAvCallback::CHXAvCallback()
: m_pAction(0)
, m_cbType(ONCE)
, m_msTimeout(0)
{
}

////////////////////////////////////////////
//
CHXAvCallback::~CHXAvCallback()
{
    Stop();
    m_timer.Close();
    HX_DELETE(m_pAction);
}

////////////////////////////////////////////
//
void CHXAvCallback::ConstructL(const CHXAvCommand& cmd)
{
    m_pAction = cmd.CloneL();
    HXSYM_LEAVE_IF_ERR(m_timer.CreateLocal());

    // active object to run on timer event
    m_pActiveObject = 
	new (ELeave) CHXAvActiveDisp<CHXAvCallback>(this, 
				    &CHXAvCallback::OnTimerEvent,
				    &CHXAvCallback::OnTimerEventCancel);

    CActiveScheduler::Add(m_pActiveObject.raw_ptr());

}


////////////////////////////////////////////
// abort callback if it is pending
//
void CHXAvCallback::Stop()
{
    if( m_pActiveObject && m_pActiveObject->IsActive() )
    {
	m_pActiveObject->Cancel();
    }
}

////////////////////////////////////////////
// issue timer event request
//
// can be called at any time to extend or
// reset the timeout
//
void CHXAvCallback::Set(TUint msTimeout, CallbackType cbType)
{
    m_cbType = cbType;
    m_msTimeout = msTimeout;

    // cancel existing request if it exists;
    Stop();

    m_timer.After(m_pActiveObject->Status(), m_msTimeout * 1000);
    m_pActiveObject->Activate();
}

////////////////////////////////////////////
// AO notification
void CHXAvCallback::OnTimerEvent(TInt status)
{
    //DPRINTF(D_GUI_VERBOSE, ("OnTimerEvent(%d)'\n", status));

    if(status == KErrNone)
    {
	m_pAction->Execute();

        HX_ASSERT(m_pAction != 0); // self-delete?
        if(REPEAT == m_cbType)
        {
	    Set(m_msTimeout, REPEAT);
        }
    }
    

}

////////////////////////////////////////////
// AO notification
void CHXAvCallback::OnTimerEventCancel(TInt status)
{
    m_timer.Cancel();
}

⌨️ 快捷键说明

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