Sleep()这个函数可以让线程睡眠一段时间,而后继续执行,参数是毫秒。
但是我们会发现,当毫秒数过小时,Sleep往往不能按照给定的时间睡眠,而是睡了长了一点的时间,这是由于Sleep函数的精度导致的,一般的系统默认的精度是10毫秒,也就是说,如果参数小于10,那么Sleep的时间可能是10,或者更多,系统尽量以10毫秒为精度保证时间准确,这对于高精度的程序来说明显不足,系统时钟clock()函数也存在类似问题。比如一个图形程序希望每秒帧数达到600,却不希望占用100%CPU,那么希望在主循环中适当加入Sleep(1),这种需求。
解决办法就是在程序初始化时执行 timeBeginPeriod(1);来设置系统时钟精度。其中的1表示1毫秒,这样基本上可以精确到Sleep(1)的程度。
不过别忘了在程序销毁之前执行 timeEndPeriod(1);以恢复系统时钟精度。