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

📄

📁 该文档较为简洁的描述了活动对象的运行机制和相关技术
💻
字号:
我自己写了个控制台的程序 有个活动对象ActiveObjectClass,在控制台中主程序中我启动了活动对象,
描述如下:
ActiveObjectClass* obj= ActiveObjectClass::NewL();//已经把活动对象添加到规化器中
obj->StartL(10000);//启动活动对象
while(true)//因为我的活动对象会在控制台上会打印信息所以弄了个死循环
{
;
}
问题:我在Runl()中有输出信息的代码,运行时候为什么控制台上没有反应?(应该是没有执行)
 
本来我是准备悬分的,但是囊中实在太羞涩,不好意思.......  那位高手帮忙解释下,困惑中.....


你的StartL(10000)是怎么样implemented?
其实只要有做到 以下几点,那应该没有问题
1。 CActiveScheduler::Add(this)
2.  发出需求,比如: RFile::Read(TInt aPos,TDes8& aDes,TRequestStatus& aStatus);
3.  SetActive()

还 有 什 么 问 题 么 ? 


对你提出的条件我都满足了:

1. CActiveScheduler::Add(this)  在ActiveObjectClass* obj= ActiveObjectClass::NewL里面包含(有问题吗?)
2. 发出需求:
StartL()
{
Cancel(); // Cancel any request, just to be sure
iState = EUninitialized;
iTimer.After(iStatus, aDelay); // Set for later
SetActive(); // Tell scheduler a request is active
//User::WaitForRequest(iStatus);(这句话必须吗?)
}

3 .StartL()已经SetActive了

、、、、、、、、、、、、、、、、、、、、、、、、

CPrintInfor::CPrintInfor() :
    CActive(EPriorityStandard)
    {

    }

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

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

void CPrintInfor::ConstructL()
    {
    User::LeaveIfError(iTimer.CreateLocal() ); // Initialize timer
    iConsole = Console::NewL(KTextConsoleTitle, TSize(KConsFullScreen,
            KConsFullScreen));
    iConsole->Write(_L("Console Created...!\n"));
    CActiveScheduler::Add( this); // Add to scheduler
    iConsole->Write(_L("Add to CActiveScheduler...!\n"));
    }

void CPrintInfor::StartL(TTimeIntervalMicroSeconds32 aDelay)
    {
    Cancel(); // Cancel any request, just to be sure
    iState = EUninitialized;
    iTimer.After(iStatus, aDelay); // Set for later
    SetActive(); // Tell scheduler a request is active
    //User::WaitForRequest(iStatus);
    }
void CPrintInfor::RunL()
    {
    if (iState == EUninitialized)
        {
        iState = EInitialized;
        iConsole->Write(_L("EUninitialized...!\n"));
        }
    else
        if (iState != EError)
            {
            iConsole->Write(_L("EError...!\n"));
            }
    SetActive(); // Tell scheduler a request is active
    }

⌨️ 快捷键说明

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