c语言关于延时函数的编写 请大大们帮我解释一下每条语句的作用

我学的是c++ primer
现在卡到这了
代码如下
void delay(int sec)
{
clock_ start=clock();//定义程序开始时间
clock_ lay=(clock_t)sec*CLOCK_PER_SEC;//自定义延时时间

while((clock()-start)<lay);//非常想知道这条语句的具体作用 具体什么时候结束循环
}
希望高手指点 手里只有20分了
谢谢!!

我来总结一下。。

clock()函数返回程序从开始执行到函数执行时所经过的时间,一般经过
1ms / CLOCK_PER_SEC ,clock()函数的返回值会增加1 。。

CLOCK_PER_SEC 为time.h文件中定义的宏,每个编译器都不一样。。
TC中这样定义: #define CLOCKS_PER_SEC 18.2
VC/BCC中这样定义: #define CLOCKS_PER_SEC 1000.0

现在分析函数的执行过程。。

函数传过来的是秒数,但是函数需要clock函数来延时,所以需要把秒数转化成
sec*CLOCL_PER_SEC,才能和clock函数返回值作比较。。

说的很清楚了,LZ应该明白了。。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-01-24
这应该是一个延时函数:
我们假定实参sec=5,意思就是延时5秒
while((clock()-start)<lay);//
lay理解成5秒里的时钟周期个数,当个数到了while循环结束
以上为个人理解,仅供参考!(我没有学过c++ primer)
第2个回答  2010-01-24
clock()表示系统当前时刻
因此while((clock()-start)<lay)的循环跳出条件为:
系统当前时刻减去delay函数开始被调用的时刻,即函数的运行时间大于自定义的延时时间时跳出循环。
这个delay函数相当于用执行while循环的时间达到延时的目的
这样说能理解吗?
第3个回答  2010-01-24
sec作为参数传入,即是你想要延时的时间,clock_start是开始时间,然后,clock_lay是把你传入的参数强制转化为时间函数的数据类型,同类型才能比较,然后while循环是要使这个函数运行时间到相应的时间才跳出循环,即到指定的时间延时。具体就是到sec时间结束delay

c语言的延迟函数 编写
延迟函数里执行的都是空语句,也就是说循环执行空语句来达到延迟的目的.每执行一条语句,即使是空语句都要耗费电脑一些处理时间的,就是因为这个,在延迟函数里写一些无关紧要的东西,用来浪费电脑处理时间,从而延迟.

C语言这样写的延时函数我不大懂,帮我分析一下,谢谢。
就是循环做减法,让N自减1 ,然后,再自减1,直到为0,才跳出循环。实际是就拖延时间。这个在不同机器上的延时是不同的。在快的机器上延时短,慢的机器上延时长。要准确延时,还得调用实时时钟才行。

请用c语言编写一个延时函数,并说明该函数在程序中是如何实现延时的?
在C语言中,可以使用delay函数来实现程序的延时功能。delay函数可以使程序暂停执行一段时间,定义一个delay函数,函数的参数为延时的时间,单位为毫秒。函数的实现如e=clock();\/\/获取当前时间es);\/\/当当前时间减去开始时间小于延时时间时,程序处于等待状态,在程序中调用delay函数,并传入需要延时的时间,...

关于单片机C语言的,这个每一句的意思是什么呢?我刚学
这个就太基础了,建议你不要心急,一定要从最基本的学起,买一本C语言的书,一定要好的,好好学基础先。给你简单解释一下:首先这是一个延时子程序,函数名是Delay,void delay(unsigned int i)这句里面的void 是指函数执行完成后返回的结果,现在是返回的无类型,就是没有返回结果。在后面(unsign...

用C语言编写1ms延迟子程序,不明白for (j=0;j<120;j++),求助大大们
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++); 就是没执行一次第一个...

...x) { int y=0; for(x;x>0;x--) for(y=0;y<400;y++) 有什么作用...
for(y=0;y<400;y++) 前面声明的整型变量y在这里做for循环,y的初值是0,在y小于400的情况下y自增,直到y=400的时候跳出循环。这个函数 要在被调用的时候才会起作用 但是这个函数根本就没有申明作用就是在这里做两条for循环语句,但是可以稍起延时作用但是这点时间对于计算机来说是微不足道的。

51单片机C语言中delay函数是怎么定义和使用的?
定义一个延时xms毫秒的延时函数 void delay(unsigned int xms) \/\/ xms代表需要延时的毫秒数 { unsigned int x,y;for(x=xms;x》0;x--)for(y=110;y》0;y--);} 使用:void Delay10us(uchar Ms){ uchar data i;for(;Ms》0;Ms--)for(i=26;i》0;i--);} i=[(延时值...

51单片机C语言程序中延时函数delay的原理是什么?
关于大小的值:如果是在C语言中,该值不仅与水晶振动、单片机本身的速度,但也与C的编译器,所以,虽然这个值可以精确计算,但大多数情况下,程序员是经验值。当然,如果你在汇编中编程,情况就不同了,因为每条指令使用一定数量的机器周期,你当然可以根据所有指令使用的总时间来计算特定延迟的总时间。

怎么用C语言写可以调节的延时程序,请大侠帮忙
C语言延时程序:10ms延时子程序(12MHZ)void delay10ms(void){ unsigned char i,j,k;for(i=5;i>0;i--)for(j=4;j>0;j--)for(k=248;k>0;k--);} 1s延时子程序(12MHZ)void delay1s(void){ unsigned char h,i,j,k;for(h=5;h>0;h--)for(i=4;i>0;i--)for(j=116;...

c语言中一个标准的延时1us的函数怎么写?
如果是单片机上,是有可能的 单片机12M晶振执行一条指令1us,所以C语言1us延时程序 用12M晶振延时1us,用—_nop_();include<intrins.h> \/\/头文件 _nop_(); \/\/这一个语句表示1us延时

相似回答