Symbian子线程实验报告

需求:

因为载入短信收件箱中的所有短信可能会花费较长时间,因此考虑把这个过程放入到一个线程中执行,因为每条短信读出来都会生成自定义的结构,因此要逐条处理。这样做的目的也是为了在逐条载入的过程中,可以对外显示一个进度条,报告载入的进度。

 

过程:

在尝试过程中,采用了《Symbian OS C++ 高效编程》中第十章的例子:CAsyncTask来封装短信读取流程。

封装完毕,编译通过(此前我已经采用阻塞流程完整读出过短信列表,因此对这块的知识储备充足)。

运行后出现E32USER -CBASE 46的Panic,多方跟踪,最后确定是子线程引用了主线程中的对象,当然:CMsvSession, SmsMtm我都计划创建一次,而读取过程可能在软件的生命周期中会被反复调用。

首先发现在线程中不能调用主线程的数据。

 

查资料后发现可以给线程传递参数,使子线程与主线程共享数据,于是采用之传递Session和MTM进来,同样一到使用这个的地方就退出。

 

最后我想,我不共享了,完全创建一套,使用完了释放,结果在子线程中,创建也是不可以的:

iSession = CMsvSession::OpenSyncL(*this);

这句直接异常,而且异常基本相同。

 

然后又查阅资料,CMsvSession可能使用到了RFs,而RFs想要在线程中共享,需要做点额外的操作(根据文档来的,好像是啥啥Auto)。显然我们不可能控制CMsvSession的RFs,我也考虑过通过OpenSyncL的重载函数输入RFs,可是,不知道输入那个。而且,这只是我的猜测,如果Session用到了很多系统资源,如iCoeEnv,那就更复杂了。

 

结论:

暂时保持目前短信载入模式。

收获:

对AO及线程有了初步的理解和经验。


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值