用C语言编写1ms延迟子程序,不明白for (j=0;j<120;j++),求助大大们

void delay1ms(int x)//延迟函数开始
{int i,j;//声明整数变数i,j
for (i=0;i<x;i++)//计数x次,延迟x 1ms
for (j=0;j<120;j++);//计数120次,延迟1ms
}//延迟函数结束
其实我想问的是语句for (j=0;j<120;j++)是对多长时间计的数,也就是说x*120=1ms,这个x是多少,是怎么来的,谢谢各位了

void delay1ms(int x)//延迟函数开始
{
int i,j;
for (i=0;i<x;i++) //计数x次,延迟x 1ms
for (j=0;j<120;j++); //计数120次,延迟1ms
}
这是一个for循环嵌套,每执行一次第一个for语句,那么第二个for语句要执行120次
for (j=0;j<120;j++); 就是没执行一次第一个for循环,就令 j =0,再判断是否 j 满足循环条件(这里就是判断是否 j 小于120)如果满足就继续循环,如果不满足就跳出循环。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-30
自己写延时是很麻烦的.
因为CPU有自己的时钟中断,如果你的循环在最后一次执行的时候,CPU发生了中断,那么你能保证就刚好是X*120吗?
CPU发生的中断,系统会调用swapcontext函数进行线程切换.(等下一个线程把运行权限交回来的时候(20ms),都不知道运行了多久了.已经运行了成千上万条指令了.)
除非把中断关闭了.但是在三环下面又不能关闭时钟中断.还是调用系统的sleep好了,这样要保险一点.本回答被提问者采纳
第2个回答  2012-07-30
可以设置for(a;b;c){ }(注:如果for循环里面为空的话{}可以省略),进入for循环后第一步执行a,之后执行b,满足条件b的话进入循环,执行{}内容后跳到c,然后再回到b判断是否满足条件,满足的话再执行{}内容回到c,依次循环直到不满足b条件为止跳出for循环。for循环中首先第一步使j的值为0,然后进入循环,本例为空所以直接执行j++,j自加后便判断j是否小于120,满足的话再执行for循环里面的空语句,又跳到执行J++;依次执行 直到j不满足<120为止跳出循环结束。
第3个回答  2012-07-30
因为每个指令执行都需要时间,大概算出来120次差不多1ms追问

能说明下for (j=0;j<120;j++)这一句具体是怎么实现的吗?感激不尽

追答

什么怎么实现?就一空循环执行120次啊

第4个回答  2012-07-30
因为每做一次i++或者j++都是需要时间的,因此可以通过x次“++”运算使得这段时间恰好为1ms。如果linux下可以利用gcc选项查看运行时间