CTelephony->NotifyChange导致程序变的很慢

Midi 2008-12-16 01:56:54
因需要监控电话状态变更事件,开始监控后程序变得很慢,
具体特征就是按“退出”,等键都没有反应。
即使按红键退出,实际上程序还是在后台运行,整个手机都变慢
只能用工具把杀掉进程,手机才恢复正常。
即使实际AO中的处理函数什么也不做,
大家知不知道是什么原因,有什么办法解决?谢谢
在6120c, N73,N95都试过,情况一样





CPhoneAO.cpp
#include "CPhoneAO.h"

CPhoneAO::CPhoneAO() :
CActive(EPriorityStandard), // Standard priority
m_oLineStatusPckg(m_oLineStatus)
{
}

CPhoneAO* CPhoneAO::NewLC()
{
CPhoneAO* self = new ( ELeave ) CPhoneAO();
CleanupStack::PushL(self);
self->ConstructL();
return self;
}

CPhoneAO* CPhoneAO::NewL()
{
CPhoneAO* self = CPhoneAO::NewLC();
CleanupStack::Pop(); // self;
return self;
}

void CPhoneAO::ConstructL()
{
User::LeaveIfError(iTimer.CreateLocal() ); // Initialize timer
CActiveScheduler::Add( this); // Add to scheduler
m_pTelephony = CTelephony::NewL();
}

CPhoneAO::~CPhoneAO()
{
Cancel(); // Cancel any request, if outstanding
delete m_pTelephony;
}

void CPhoneAO::DoCancel()
{
iTimer.Cancel();
}

void CPhoneAO::StartL()
{
Cancel(); // Cancel any request, just to be sure
m_pTelephony->NotifyChange(iStatus, CTelephony::EVoiceLineStatusChange,
m_oLineStatusPckg);
SetActive(); // Tell scheduler a request is active
}

void CPhoneAO::RunL()
{
m_pTelephony->NotifyChange(iStatus, CTelephony::EVoiceLineStatusChange,
m_oLineStatusPckg);
SetActive(); // Tell scheduler a request is active
}

TInt CPhoneAO::RunError(TInt aError)
{
return aError;
}

void CPhoneAO::Stop()
{
Cancel();
//m_pTelephony
}


CPhoneAO.h

#include <e32base.h> // For CActive, link against: euser.lib
#include <e32std.h> // For RTimer, link against: euser.lib
#include <Etel3rdParty.h>

class CPhoneAO : public CActive
{
private:
/**
* CTelephony对象指针,用于获取电话事件
*/
CTelephony* m_pTelephony;

/**
* 线路状态
*/
CTelephony::TCallStatusV1 m_oLineStatus;

/**
* 线路状态包
*/
CTelephony::TCallStatusV1Pckg m_oLineStatusPckg;

public:
// Cancel and destroy
~CPhoneAO();

// Two-phased constructor.
static CPhoneAO* NewL();

// Two-phased constructor.
static CPhoneAO* NewLC();

public:
// New functions
// Function for making the initial request
void StartL();

void Stop();

private:
// C++ constructor
CPhoneAO();

// Second-phase constructor
void ConstructL();

private:
// From CActive
// Handle completion
void RunL();

// How to cancel me
void DoCancel();

// Override to handle leaves from RunL(). Default implementation causes
// the active scheduler to panic.
TInt RunError(TInt aError);

private:
enum TNewClassState
{
EUninitialized, // Uninitialized
EInitialized, // Initalized
EError // Error condition
};

private:
TInt iState; // State of the active object
RTimer iTimer; // Provides async timing service

};


TestAppUi.cpp

void CTestAppUi::HandleCommandL(TInt aCommand)
{
switch (aCommand)
{
case EEikCmdExit:
case EAknSoftkeyExit:
Exit();
break;

case ECommand1:
{
m_pPhoneAO = CPhoneAO::NewL();
m_pPhoneAO->StartL();
}
break;
case ECommand2:
{
m_pPhoneAO->Deque();
//
}
...



...全文
95 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
anel 2008-12-16
  • 打赏
  • 举报
回复
加上:
void CPhoneAO ::DoCancel()
{
iTelephony->CancelAsync( CTelephony::EVoiceLineStatusChangeCancel );
}
btsy2000 2008-12-16
  • 打赏
  • 举报
回复
sorry,我没看出来有什么问题

3,120

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧