RChangeNotifier和CEnvironmentChangeNotifier 的使用

本文介绍RChangeNotifier和CEnvironmentChangeNotifier的使用方法,包括如何监听系统时间更改、午夜跨越、线程死亡、电源状态变动及内存分配失败等事件。

 收藏

 RChangeNotifier 

CEnvironmentChangeNotifier 

可以用来监视是否到达了午夜,位置改变,有线程死掉了,系统时间被修改,电量变化等事件,有因内存不足引起的分配失败等事件

 RChangeNotifier 和 CEnvironmentChangeNotifier 的关系类似于RTimer和CTimer的关系。

RChangeNotifier 是阻塞的,使用的时候最好放在一个CActive里面。用法灵活。

CEnvironmentChangeNotifier  本身就是个CActive可以直接使用。使用方便

 

 

 

使用方法如下:

RChangeNotifier:

 

 

 

{

...

RChangeNotifier the_notifier;

TRequestStatus the_status;

...

the_notifier.Create();

the_notifier.Logon(the_status);

User::WaitForRequest(the_status);

...

...// prepare for a long wait

...

TInt changes = the_status.Int();

if (changes & EChangesSystemTime)

    {

    // handle a change to system time

    }

if (changes & EChanges EChangesLocale)

    {

    // handle a change to locale

    }

...

the_notifier.Close();

...

}

CEnvironmentChangeNotifier

 

void CExampleEnvChangeNotifier::ConstructL()

      {

      iCallBack = new (ELeave)TCallBack(CallBackFunction, this);

      iChangeNotifier =

           CEnvironmentChangeNotifier::NewL(0, *iCallBack);

      iChangeNotifier->Start();

      }

CExampleEnvChangeNotifier::~CMyEnvChangeNotifier()

      {

      iChangeNotifier->Cancel();

     delete iChangeNotifier;

     delete iCallBack;

      }

TInt CExampleEnvChangeNotifier::CallBackFunction(TAny* aFunction)

      {

      return ((CEventsEnvChangeNotifier*)aFunction)->ChangeL();

      }

TInt CExampleEnvChangeNotifier::ChangeL()

     {

      TInt change = iChangeNotifier->Change();

//当iChangeNotifier 启动的时候绘产生一次回掉此时change为127

    if (change==127)

    {

        return -1;

    }

      if (change & EChangesLocale)

             {

             // Locale change, do something 

             }

      if (change & EChangesMidnightCrossover)

             {

             // Midnight crossover, do something 

             }

      if (change & EChangesThreadDeath)

             {

              // Thread death, do something 

             }

      if (change & EChangesPowerStatus)

             {

             // Power status change, do something 

              }

      if (change & EChangesSystemTime)

              {

              // System status change, do something 

              }

      return 1;

       }

EChangesLocale 

The system locale has changed.

 

 

Typically this event occurs as a result of a call to TLocale::Set().

 

 

 

位置改变

 

EChangesMidnightCrossover 

The system time has passed midnight.

 

 

 

到达午夜

 

EChangesThreadDeath 

A thread has died.

 

 

This event is reported when any thread in the system dies.

 

 

 

有线程死掉了

 

EChangesPowerStatus 

The status of the power supply has changed.

 

 

 

电量变化

 

EChangesSystemTime 

The system time has changed.

 

 

 

系统时间被修改

 

 

EChangesFreeMemory 

The free memory level has crossed a specified threshold value.

 

 

 

 

 

EChangesOutOfMemory 

A memory allocation has failed due to insufficient free memory.

 

 

 

有因内存不足引起的分配失败

 

 

我专门写了个CEnvironmentChangeNotifier 例子,在e51上可以正常工作了。http://download.youkuaiyun.com/source/710390

先看效果: https://pan.quark.cn/s/a4b39357ea24 标题中“数学建模-C题 维修线性流量阀时的内筒设计问题”标识的是一项参与数学建模竞赛的任务,该项任务的核心在于探究在维护线性流量阀的过程中,应如何构建内筒以提升其运作表现。 数学建模是借助数学工具来处理现实世界挑战的一种途径,它要求运用数学框架来刻画剖析现实系统或运作过程。 针对这一特定课题,关键在于深入掌握并改进流量阀的内部构造,特别是内筒的设计,目的是增强其作业效率。 线性流量阀是一种用于调控流体通行量的设备,普遍应用于工业自动化、供暖通风及空调系统以及水净化等范畴。 它通过调整阀门内部构件(例如内筒)的位置变动来控制流经阀门的流量,从而保障流量与阀门操作点的位置保持一致。 内筒的构建具有决定性作用,因为它直接关联到阀门的流量特征、反应速率以及运行稳定性。 在数学建模实践中,参赛者须首先明晰流量阀的操作机制内筒的功能。 这可能要求涉及流体力学、机械工程以及控制科学等领域的专业知识。 随后,他们需要确立适宜的数学框架,例如运用微分方程来表述流体运动,或借助优化方法来确定内筒的最佳形状参数。 潜在的建模环节包括:1. 信息采集:汇集有关线性流量阀的工作指标,如流量区间、压力梯度、内筒材质属性等。 2. 确立目标函数:比如,减少流量偏差、削减能源消耗或延长阀门使用寿命。 3. 构建模型:开发数学框架,可能融合流体动力学公式、材料力学方程、控制理论模型等。 4. 参数化构造:内筒的形态、尺寸、材质等可变元素作为模型的参数。 5. 解决优化课题:采用数值手段或解析策略求解框架,识别最优设计方案。 6. 结果核实:借助实验或仿真平台验证框架的精确度以及内筒设计的效能。 标记“资料”表明这个压缩文件或许收纳了相关...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值