Symbian OS消息机制与常用操作解析

Symbian OS 的消息机制还蛮有意思的。它不像现代的推送系统,而是靠消息队列和一套自家的CActive机制搞定线程通信。你要是做过老塞开发,应该对RunL()这个函数挺熟。文章里面讲得还挺细,从TDesC怎么传消息,到CMdaDataEnv怎么发消息,一步步全拆开了。

消息类型的定义也不麻烦,直接用enum搞定。注册消息器嘛,用CActive::SetSubscribedAndActive()就行。时判断消息类型,再切分逻辑去跑具体函数,像这样:

void CActive::RunL() {
  switch (Message().Type()) {
    case EMsgType1: HandleMsgType1(); break;
    case EMsgType2: HandleMsgType2(); break;
  }
}

你要做异步也没问题,Start()Cancel()方法管得住。响应还挺快,代码也清爽。

文档还有个小例子,发消息用env.Send(),接收用自定义的CActive子类,嗯,跑起来还挺顺。反正你要是还在跟 Symbian 打交道,或者想看看经典平台是怎么玩消息机制的,这篇文档还是值得翻一翻的。

如果你对其他平台的消息队列也感兴趣,可以看看下面这些:

rar 文件大小:28.83KB