二、暂停和恢复进程的运行
Windows不存在暂停或恢复进程的概念,因为进程不会被安排获得 C P U时间。Windows允许一个进程暂停另一个进程中的所有线程的运行,但是从事暂停操作的进程必须是个调试程序。
三、线程的睡眠方式
VOID Sleep(DWORD dwMilliseconds);
使线程自己暂停运行dwMilliseconds MS,在此时间片内线程是不可调度状态。
调用该函数可以使进程自愿放弃所拥有的剩余时间片;为Sleep传递0时,调用线程将释放剩余时间片,迫使系统调用别的线程(如果不存在多个拥有相同优先级的可调度线程,系统会重新调度刚Sleep(0)的线程);Sleep(INFINITE)使线程永远不会被调度(最好让线程退出以还原堆栈和内存对象,而不用该方法)。
四、线程间的切换
BOOL SwitchToThread();
系统查看是否存在迫切需要 C P U时间的线程。如果没有就会立即返回。如果存在就对该线程进行调度(该线程的优先级可能低于调用 SwitchToThread的线程) 。这个迫切需要CPU时间的线程可以运行一个时间段,然后系统调度程序照常运行。
该函数允许一个需要资源的线程强制另一个优先级较低、而目前却拥有该资源的线程放弃该资源。调SwitchToThread函数时没有其他线程能够运行,那么该函数返回 FALSE,否则返回一个非0值。
传递一个0ms的超时参数时,SwitchToThread允许优先级低的进程运行,而Sleep函数会立即返回对该线程进行重新调度,而不会允许低优先级的线程被调度。