Symbian OS 开发之多线程

上一篇 / 下一篇  2008-02-27 14:38:43

Symbian OS支持多线程, 但是用得很少, 因为官方建议尽可能使用Active Object代替。 我们将在下一课讲解Active Ojbect 和推荐使用它的原因。  

Symbian OS支持多线程, 但是用得很少, 因为官方建议尽可能使用Active Object代替。 我们将在下一课讲解Active Ojbect 和推荐使用它的原因。 考虑对于

普通的程序员来说多线程是一个要熟悉的多的概念, 我们在这一课将通过一个很简单的例子来介绍它在Symbian OS中的实现。 首先, RThread 类代表线程,我们可以通过这个类来创建,启动,停止,关闭线程,它还包括其他一些有用的API, 大家可以参看文档。
要创建线程RThread中一共有3 个Create函数, 基本大同小异,我们这里就用第一个:

TInt Create(const TDesC& aName,TThreadFunction aFunction,TInt aStackSize,TInt aHeapMinSize,TInt aHeapMaxSize,TAny *aPtr,TOwnerType aType=EOwnerProcess);
aName: 线程的名称
aFunction: 线程要执行的函数
aStackSize: 栈的大小, 一般都使用KDefaultStackSize(缺省值)
aHeapMinSize: 堆的最小值
aHeapMaxSize: 堆的最大值
aPtr: aFunction的参数, 可以是任意指针
aType: 缺省值为EOwnerProcess
当一个线程被创建后, 它处在非活动状态, 要启动它需要调用 Resume()函数。
最后, 我们要知道线程是否已经执行完毕, 有很多方法,这里用了一个最简单的:semaphore.

下面将介绍一个多线程的例子,因为sdk中用到多线程的例子比较复杂, 我在文字版的helloworld上建立了一个很简单的例子。 不过你再按照本文修改

helloworld之前,建议把原本的例程做一个备份, 这样万一以后忘了怎么写helloworld也不至于去下载一个新的sdk:)

这个程序创建两个线程, 他们同时试图修改十个整数:num, 运行的时候我们会看到num的值总是徘徊于初始值:100左右。
修改过的helloworld.cpp 在:http://homepage.ntlworld.com/jia ... son8/helloworld.cpp

TInt ThreadFunction(TAny* aAny) 是线程要执行的函数, 它的名称可以是任意的, 但是参数必须是(TAny* aAny). 我们可以用这个指针来传递任何数据, 可

以是整数,Descriptor, 数组等等。 返回值必须是TInt. 我的实现很简单, 它对num 进行100次改动, 根据aAny的值来定改动的方向和幅度。 每次改动之间

等待0-1秒。

下边doExample是程序的入口, t1,t2为两个线程,注意每一个线程创建之后的CleanupClosePushL(...), 这个是CleanupStack::PushL的延伸。 假如创建t1后我

们直接创建t2, 然后在创建t2的过程中发生错误,通过User::LeaveIfError(err);离开, 那么t1所分配的内存就泄漏了。 为了避免这个情况, 我们要把t1的放

到清洁栈上。 然而记得我们第2课讲的,R-class本身不动态分配内存, 他只是系统资源的一个句柄。要回收资源就必须使用它的Close函数。

CleanupClosePushL() 就是为此情况设计的。 它把对象放在清洁栈上, 当离开发生的时候自动调用那个对象的Close函数。

然后我们创建一个Semaphore来判断线程是否结束, 当一个线程结束时, 它会调用semaphore的Signal函数使它的值加一。

调用Resume来启动线程。

当它的值在2你内的时候我们每1/10秒输出一次num的值。

最后从清洁栈上取下t1,t2, 他们的Close函数会被自动调用。

TAG:

引用 删除 Guest   /   2008-07-13 10:36:14
学习了,不过能把例子发给我看么?打不开链接。。。谢了呵。邮箱是drust0101@bupt.cn
引用 删除 Guest   /   2008-07-03 14:57:26
你的这个helloworld 的例子能不能发给我,呢个链接打不开,谢谢。
我 的邮箱是nianjun_123@163.com
引用 删除 junerjie   /   2008-05-04 13:59:22
您好,我是科博电脑技术服务公司的。
我们公司供应电脑设备及电脑耗材,还包括
电脑组装、升级、维修、局域网组建、监控
安装等一些服务。我们有专业的技术人才为
您上门服务,从中收取50元的服务费。如果
有需要帮忙的地方,请与我联系!
            联系电话:010-82614906/5798
            E-mail :tangxiujun89@gmail.com
            Q    Q :549577912
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2008-10-11  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 3145
  • 日志数: 17
  • 建立时间: 2008-02-26
  • 更新时间: 2008-06-27

RSS订阅

Open Toolbar