几个知识点:
1.使用SuspendThread和ResumeThread来暂停和恢复线程的运行。
2.通过Sleep函数,线程可以告诉系统,它不想在某个时间段内被调度。系统将在大约的指定毫秒数内使线程不可调度。如果给Sleep函数传递0,表示调用线程将释放剩余的时间片,并迫使系统调度另一个线程。
3.系统提供了一个称为SwitchToThread的函数,使得另一个可调度线程(如果存在的话)能够运行。
4.当要计算线程执行某个任务需要多长时间时,如果采用GetTickCount,则假设了当前线程不会被中断。因此我们需要一个函数,以便返回当前线程得到的CPU时间的数量,GetThreadTimes函数可以做到。GetProcessTimes是针对进程的相对应的函数,适用于进程中的所有线程。
5.Windows还提供了一些高分辨率性能函数:QueryPerformanceFrequency以及QueryPerformanceCounter。
6.Windows允许使用GetThreadContext和SetThreadContext来获取和设置线程的上下文,不过在获取和设置之前,应该先暂停线程。
7.当系统引导时,它会创建一个特殊的线程,称为0页面线程。该线程被赋予优先级0。它是整个系统中唯一的一个在优先级0上运行的线程。当系统中没有任何线程需要执行操作时,0页线程负责将系统中的所有空闲RAM页面置0。
8.进程可以使用SetPriorityClass和GetPriorityClass来设置和查询优先级类。线程可以使用SetThreadPriority和GetThreadPriority来设置和查询线程的优先级。
9.系统可以为基本优先级等级在动态优先级范围(1~15)内的线程动态提高线程的优先级等级(如:当低优先级的线程处于CPU饥渴状态时,或者当一个进程是前台进程时),但是系统也绝不会将优先级提高到实时范围(高于15)。
10.可以使用SetProcessPriorityBoost和SetThreadPriorityBoost来使动态提高线程优先级等级的功能不起作用。函数GetProcessProrityBoost和GetThreadPriorityBoost用于查询。
11.使用SetProcessAffinityMask和GetProcessAffinityMask来设置和获取进程的亲缘性。使用SetThreadAffinityMask来为各个线程设置亲缘性屏蔽。若要为线程设置一个理想的CPU,可以调用SetThreadIdleProcessor。