使用线程睡眠:Sleep(1000)
线程可以调用
Sleep函数使其在指定时间内不被调度:
VOID Sleep(DWORD dwMilliseconds);
Sleep调用会挂起当前线程,dwMilliseconds毫秒之后再将其恢复为可调度的。Sleep函数有以下几点值得注意:Sleep调用会导致当前线程放弃其剩余的时间片
Sleep调用时,系统挂起当前线程的时长大约是dwMilliseconds毫秒——比如,当dwMilliseconds设置为100时,在大多数情况下,当前线程睡眠的时长并不会是100ms,可能是几百毫秒、几秒、几分钟甚至更长。因为Windows并不是一个实时系统,所以dwMilliseconds只是一个建议值
为dwMilliseconds传递INFINITE会使当前线程永远睡眠,这通常没什么用处
为dwMilliseconds传递0时,当前线程会放弃剩余的时间片,系统会尝试调度
优先级等于或高于当前线程 的可调度线程,如果没有找到这样的线程,系统将马上重新调度调用Sleep的线程
切换:SwitchToThread
当前线程可以调用SwitchToThread强迫操作系统调度另外的可调度线程(如果存在):
BOOL SwitchToThread();当前线程调用SwitchToThread时,系统会检查是否存在可调度的线程处于“饥饿”状态,如果没有找到,SwitchToThread立刻返回,系统继续执行当前线程,否则系统将暂停当前线程并调度处于“饥饿”状态的线程(无论该线程的优先级大小),“饥饿”线程的调度时间大约是一个时间片,然后系统调度将恢复正常。当线程A需要获得某资源,而该资源又被另一优先级较低的线程B占用时,A可以调用SwitchToThread迫使操作系统调度低先级的进程,以期待B释放被占用的资源。当没有其它线程可调度时,SwitchToThread返回FALSE,否则返回一个非0值。SwitchToThread函数和Sleep(0)调用类似,不同之处在于SwitchToThread允许系统调度优先级低于当前线程的可调度线程,但Sleep(0)只允许调度优先级不低于当前线程的可调度线程。