有时候,为了防止 CPU占用100%,就使用Sleep(1)来使CPU稍做休息以达到操作系统任务调度的流畅性
但是,对于Sleep(1)所产生的效果,在不同的系统上会有不同的表现
上周发现原来正常运行的程序,在最新的一台笔记本上无法正常运行,总是很慢,后来跟踪,发现是文件读取太慢导致的,再跟踪进去,发现是在读取文件之后对文件分析的while()循环中Sleep(1)导致的
经过测试发现,在该有问题的笔记本上,Sleep(1)相当于Sleep(16),有15%的机率相当于Sleep(15),测试代码如下:
DWORD dw1 = GetTickCount();
Sleep( 1 );
DWORD dw2 = GetTickCount();
long le = dw2 - dw1;
结果发现,le大部分时候都是16,有大约15%左右的机率是15
该笔记本的系统是windows table PC xp + sp3,(前面的名称记得不大清楚了,基本上就是这个版本),硬件配置很高:3G内存,intel T7700 CPU
后来在其它的系统上测试,Sleep(1),即测试代码中的le总是0,而在文件分析的while()循环中每一圈都要Sleep(1),所以就非常明显地造成了这个Sleep()的时间过长,以致于其影响了正常的运行
至于是操作操作对Sleep(1)的影响还是硬件对Sleep(1)的影响我不知道,没有每件进行更详细的测试,但得出一个结论:对这种“小问题”也不能掉以轻心,像这种问题如果只发生在客户那里,那就非常难解决