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) |