首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Symbian >

使用CPeriodic的时候,在调用的TCallBack事件里面创建一个对话框,出现CONE 44异常

2012-01-19 
使用CPeriodic的时候,在调用的TCallBack事件里面创建一个对话框,出现CONE 44错误我用的SDK是 UIQ 3.1。在一

使用CPeriodic的时候,在调用的TCallBack事件里面创建一个对话框,出现CONE 44错误
我用的SDK是 UIQ 3.1。在一个叫Progress的工程中,我在CProGressView类里面定义了一个CPeriodic对象iTimer。下面是部分代码:

C/C++ code
void CProgressView::HandleCommandL(CQikCommand& aCommand)    {    switch (aCommand.Id())        {        case EProgressInfoPrint1Cmd:            {            break;            }        case EProgressInfoPrint2Cmd:            {                        iTimer->Start(1000,1000,TCallBack(CallTimer,this));                break;            }        case EProgressInfoPrint3Cmd:            {                        break;            }            // Go back and exit command will be passed to the CQikViewBase to handle.        default:            CQikViewBase::HandleCommandL(aCommand);            break;        }    }

iTimer调用了CallBack函数 CallTimer,其中CallTimer定义如下:
C/C++ code
TInt CProgressView::CallTimer(TAny *aThis)    {        CProgressView* self=static_cast<CProgressView*>(aThis);        self->OnTimer();    }void CProgressView::OnTimer()    {    if(iTimerTick==0)                            //iTimerTick为计数器,初始值为0    {         CLabelDialog::RunDlgLD();          //创建一个对话框CLabelDialog,CLabelDialog为自己定义的一个对话框类。    }        iTimerTick++;     }

程序编译没问题,但在模拟器上面跑,iTimer调用start()之后,对话框被创建出来但不能响应任何事件,过了7秒左右就弹出一个对话框说CONE 44。我查了以下CONE 44是企图销毁尚存留在控件栈里面的控件,但问题是我并没有手动删除任何东西。这个问题搞了半天没有头绪,请高人指点!


[解决办法]
Hi,

我感觉iTimerTick并没有起到预期的作用,导致Dialog弹出后Timer仍然在不停地触发,因此不停地弹出新的Dialog。

试着在OnTimer()的最开始加上停止Timer的代码,然后弹出对话框。

void CProgressView::OnTimer()
{
iTimer->Cancel();
CLabelDialog::RunDlgLD();
}

与本贴主题无关的一个问题是,由于OnTimer()调用了可能leave的函数,所以它也可以加上L后缀,相应地CallTimer()里加上TRAP语句。

Regards

Ziteng Chen

热点排行