惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
NISL@THU
NISL@THU
E
Exploit-DB.com RSS Feed
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
K
Kaspersky official blog
Project Zero
Project Zero
Cisco Talos Blog
Cisco Talos Blog
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
S
Schneier on Security
G
GRAHAM CLULEY
The Hacker News
The Hacker News
T
Threat Research - Cisco Blogs
Scott Helme
Scott Helme
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy & Cybersecurity Law Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
T
Tor Project blog
AWS News Blog
AWS News Blog
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
爱范儿
爱范儿
P
Privacy International News Feed
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
S
Securelist
G
Google Developers Blog
The Last Watchdog
The Last Watchdog
Google Online Security Blog
Google Online Security Blog
美团技术团队
F
Fortinet All Blogs
小众软件
小众软件
Recorded Future
Recorded Future
V
Visual Studio Blog
B
Blog RSS Feed
H
Help Net Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Google DeepMind News
Google DeepMind News
Blog — PlanetScale
Blog — PlanetScale
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
Martin Fowler
Martin Fowler
Latest news
Latest news
Spread Privacy
Spread Privacy
H
Heimdal Security Blog

博客园 - 不明飞行物

磨刀不误砍柴工-打造超级Symbian开发环境 Symbian OS 开发初级手册 (7) Descriptors - 不明飞行物 Symbian OS 开发初级手册 (6) CleanupStack and Two-phase Symbian OS 开发初级手册 5 - Leave Symbian OS 开发初级手册 (4) mmp, pkg 文件 和 makesis 工具 Symbian OS 开发初级手册 (3)GUI程序中的4个基本类 Symbian OS 开发初级手册 (2)基本数据类型 Symbian OS 开发初级手册 (1) Introduction 利用JavaMail收/发Gmail邮件(SSL) Tapestry4在提交前判断checkbox是否没有一个被选中 - 不明飞行物 - 博客园 恢复windows的引导程序 在页面中插入Windows Media Player播放器 - 不明飞行物 Java中Set的深入研究 - 不明飞行物 - 博客园 Hibernate和Spring的延迟加载和DAO模式 用spring管理hibernate事务时,lzay="true"不能用的解决方法 java中List和Set对象的互换 Tapestry4.0中取得页面request - 不明飞行物 - 博客园 Logout in tapesty4.0 - 不明飞行物 validators里自定义错误信息 - 不明飞行物 - 博客园
Symbian OS 开发初级手册 (8) 多线程
不明飞行物 · 2006-05-28 · via 博客园 - 不明飞行物

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/jiayao/Symbian_Junior_Tutorial/Lesson8/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函数会被自动调用。