20130806_第一次修改
ccb_david
//================================================================================================
首先sleep函数在不同的操作系统下参数的内容是不一样的:
Dos:
sleep(1); //停留1秒
delay(100); //停留100毫秒
Windows:
Sleep(100); //停留100毫秒
Linux:
sleep(1); //停留1秒
usleep(1000); //停留1毫秒
sleep(1); //停留1秒
delay(100); //停留100毫秒
Windows:
Sleep(100); //停留100毫秒
Linux:
sleep(1); //停留1秒
usleep(1000); //停留1毫秒
其次在windows里Sleep函数的“S”是大写的,其他的都是小写。
接着我查看了sleep函数在WINBASE.H的定义,定义如下:
WINBASEAPI
VOID
WINAPI
Sleep(
通过定义我们知道Sleep函数里参数是双字型参数,且单位为毫秒。
为了测试是否真如资料中所讲Sleep函数的精度能够保证,我编写下面的程序用于测试其精度。
由于我们需要使用for循环,为了循环本身可能存在的误差,我们先将一次循环大致需要的时间计算出来。
检测循环时间源码部分:
#include<iostream>
using namespace std;
#include <windows.h>
#pragma comment(lib, "Winmm.lib")
int main()
{
}
经过运行我们可以得到循环一亿次for循环大概花费的时间在222-249毫秒之间,这样估计大约一次for循环花费的时间是2.22-2.49
ns,基本可以排除循环所带来的误差。
检测sleep函数延迟时间源码部分:
#include<iostream>
using namespace std;
#include <windows.h>
#pragma comment(lib, "Winmm.lib")
int main()
{
}
经过运行我们可以得到100个输出,其中只有1个输出为51其他均为50,根据这些数据,我们可以基本认为,sleep函数的精度基本上可以说在1毫秒左右。
*注:如果讲究严谨,我们还需要考虑三个赋值运算与一个减法运算。但是通过汇编语言层面我们可以知道,赋值与减法运算在寄存器内部进行操作,所以在这个测试中我们基本可以排除赋值运算与减法运算对我们本次测试的影响。
即使有一天在技术上我已经是个能手,请记住自己应有的责任和保持一个真诚交流、始终渴望追求技术的心。