线程也能告诉系统,它不想在某个时间段内被调度。这是通过调用Sleep函数来实现的:
VOID Sleep(DWORDdwMilliseconds);
该函数可使线程暂停自己的运行,直到dwMilliseconds过去为止。关于Sleep函数。
有下面几个重要问题值得注意:
1、调用Sleep,可使线程自愿放弃它剩余的时间片。
2、系统将在大约的指定毫秒数内使线程不可调度。如果告诉系统,想睡眠100ms,那么可以睡眠大约这么长时间,但是也可能睡眠数秒钟或者数分钟。记住, Windows不是个实时操作系统。虽然线程可能在规定的时间被唤醒,但是它能否做到,取决于系统中还有什么操作正在进行。
3、可以调用Sleep,并且为dwMilliseconds参数传递INFINITE。这将告诉系统永远不要调度该线程。这不是一件值得去做的事情。最好是让线程退出,并还原它的堆栈和内核对象。
4、可以将0传递给Sleep。调用线程将释放剩余的时间片,并迫使系统调度另一个线程。但是,系统可以对刚刚调用Sleep的线程重新调度。如果不存在多个拥有相同优先级的可调度线程,就会出现这种情况。
FangSH 2010-12-28