Chinaunix首页 | 论坛 | 博客
  • 博客访问: 343818
  • 博文数量: 97
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 636
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-12 22:41
文章分类

全部博文(97)

文章存档

2017年(8)

2015年(87)

2014年(2)

我的朋友

分类: 嵌入式

2015-06-13 12:17:39

 
    wince的优先级是0~255,其中0~247是实时优先级,248~255一 般为应用程序的优先级。一个应用程序的优先级默认是251。创建线程的时候没有办法直接设置优先级,但是应用程序可以动态提升自己的线程的优先级,有两个 API可用SetThreadPriority和CeSetThreadPriority。前者可在248~255范围内调节,后者可提升至实时线程。
     线程调度和时间片大小有很大关系,时间片大小一般在OEMinit()中初始化,也可以通过SetThreadQuantum来修改,当然也有对应的Get函数。一般默认是100ms。
     wince的调度原则是高优先级线程可以实时抢占低优先级线程的cpu资源。所以在调用SetThreadPriority的时候需要多加注意。因为一旦 提升了的线程的优先级高于本线程,本线程将无法得到执行。而把SetThreadPriority放入被提升的线程中也是会引发难以想象的问题。我用的一 种办法是主调线程先提升自己的优先级,然后再创建新线程,并设CREATE_SUSPENDED,SetThreadPriority之后再 ResumeThread。但是有些场合不太适合这样用。
     对于同等级的线程,会轮流使用时间片。同一个进程的多个线程也会参与公平竞争。
     对于windows的微内核结构,驱动程序都不是内核进程,device.exe会用一个线程执行驱动程序的函数。而线程的默认优先级就是251,
阅读(1799) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~