symbian线程和进程学习笔记

来源:互联网 发布:语音互动软件 编辑:程序博客网 时间:2024/04/30 09:10

 1) 多线程相比于活动对象,具有更高的运行期要求,例如,线程间上下文切换比同一个线程活动对象的切换慢一个数量级;线程需要更大的空间开销,通常线程要有4K内核空间和8K用户空间的程序栈;相比之下,活动对象只需要占用C++对象的空间(通常小于1K)。
2) 使用线程和使用活动对象实现多任务的最大区别是前者是由内核抢占执行,后者的协同多任务发生在一个线程中,并且一旦开始处理一个事件,活动对象就无法被其所在的活动调度器所抢占(所以RunL要迅速返回,否则会阻塞主线程,即事件处理尽量简短)。
  但仍有很多场合必须使用多线程,如下
 多媒体处理
 移植程序
 一个任务无法分割成简短片段的任务。
 为了保证所执行任务的连续性,比如播放声音
这样就可以将其在新建的线程中实现,从而可以异步运行该线程,而不会影响到应用程序对用户接口事件的响应。
PS: symbian下访问界面(画图绘屏等)必须在主线程
3) 为了保护线程免受潜在恶意代码的困扰,从Symbian 8.0后就不允许一个线程操纵其他线程(这也是在主线程中执行receiveThread.kill(0)导致程序退出的原因)。
4) 可在.mmp文件中作为分离进程运行组件的主线程指定其堆尺寸的最小值和最大值
      Epocheapsize  minSize maxSize
5) 编写多线程代码时,不应该任意的赋予线程一个高优先级,否则它可能抢占系统中的其他线程。
6) 所有线程默认优先级为EPriorityNormal,当线程被创建,其被置为挂起状态不会开始运行,直到调用Resume()
7) 线程之间无法直接传递数据指针,因为进程地址空间被加以保护而相互隔离了。
8) 每个线程都有自己的heap和stack;主程序有默认的清除栈(cleanStack),新建的线程就得手动创捷清除栈。
  9) 多线程可通过同步对象来访问资源。通过限制或直接锁住资源,保证在同一时刻只能有一个线程对资源写操作,比如临界区(Critical Sections)