C语言编程中的延时

作者&投稿:鄣疯 (若有异议请与网页底部的电邮联系)
c语言延时程序的意思!~

晕 这哪是什么延时啊 就搞了 三个循环 达不到延时的效果 也太小看计算机运算速度了吧 这一秒都不到 就算出来了 那个 ; 就是 一个 语句结束符,没什么意思

这个是和你机器的运算速度有关的
你要计算出这个函数用了多少时间就要用时间函数,我很久没用了。

#include "stdlib.h"

void delay()
{
time_t start,end;
start=time(null);
unchar i;
while(z--)
{
for(i=0;i<121;i++);
}
end=time(null);
printf("%f",difftime(end,start));
}

//time_t是在头文件中定义的,可能是个结构体类型里面的成员定义了一些时间的单位,如年、月、日。在这里调用这个结构体定义2个变量;
//start=time(null);
将其中一个变量赋值。它的值等于当前的系统时间
//end=time(null);
在程序结束的时候再给另一个变量赋值,值等于当前的系统时间。
//difftime(end,start)
函数difftime();是double类型,用来计算运行的时间,用第一个参数的时间减去第二个参数的时间,得到的值就是运行用了多少时间。单位为秒

您好 这个延时函数很不稳定的,没有固定的时间

如果您使用tc 您可以用sleep(微秒)来延时

使用vc的话有5种常用方式:
方式一:VC中的WM_TIMER消息映射能进行简单的时间控制。首先调用函数SetTimer()设置定时间隔,如SetTimer(0,200,NULL)即为设置200ms的时间间隔。然后在应用程序中增加定时响应函数 OnTimer(),并在该函数中添加响应的处理语句,用来完成到达定时时间的操作。这种定时方法非常简单,可以实现一定的定时功能,但其定时功能如同Sleep()函数的延时功能一样,精度非常低,最小计时精度仅为30ms,CPU占用低,且定时器消息在多任务操作系统中的优先级很低,不能得到及时响应,往往不能满足实时控制环境下的应用。只可以用来实现诸如位图的动态显示等对定时精度要求不高的情况。如示例工程中的Timer1。

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

方式二:VC中使用sleep()函数实现延时,它的单位是ms,如延时2秒,用sleep(2000)。精度非常低,最小计时精度仅为30ms,用sleep函数的不利处在于延时期间不能处理其他的消息,如果时间太长,就好象死机一样,CPU占用率非常高,只能用于要求不高的延时程序中。如示例工程中的Timer2。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

方式三:利用COleDateTime类和COleDateTimeSpan类结合WINDOWS的消息处理过程来实现秒级延时。如示例工程中的Timer3和Timer3_1。以下是实现2秒的延时代码:

COleDateTime start_time = COleDateTime::GetCurrentTime();
COleDateTimeSpan end_time= COleDateTime::GetCurrentTime()-start_time;
while(end_time.GetTotalSeconds()< end_time =" COleDateTime::GetCurrentTime()-start_time;">

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

方式四:在精度要求较高的情况下,VC中可以利用GetTickCount()函数,该函数的返回值是 DWORD型,表示以ms为单位的计算机启动后经历的时间间隔。精度比WM_TIMER消息映射高,在较短的定时中其计时误差为15ms,在较长的定时中其计时误差较低,如果定时时间太长,就好象死机一样,CPU占用率非常高,只能用于要求不高的延时程序中。如示例工程中的Timer4和Timer4_1。下列代码可以实现50ms的精确定时:

DWORD dwStart = GetTickCount();
DWORD dwEnd = dwStart;
do
{
dwEnd = GetTickCount()-dwStart;
}while(dwEnd <50);

为使GetTickCount()函数在延时或定时期间能处理其他的消息,可以把代码改为:
DWORD dwStart = GetTickCount();
DWORD dwEnd = dwStart;
do
{
MSG msg;
GetMessage(&msg,NULL,0,0);
TranslateMessage(&msg);
DispatchMessage(&msg);
dwEnd = GetTickCount()-dwStart;
}while(dwEnd <50);

虽然这样可以降低CPU的占有率,并在延时或定时期间也能处理其他的消息,但降低了延时或定时精度。

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

方式五:与 GetTickCount()函数类似的多媒体定时器函数DWORD timeGetTime(void),该函数定时精度为ms级,返回从Windows启动开始经过的毫秒数。微软公司在其多媒体Windows中提供了精确定时器的底层API持,利用多媒体定时器可以很精确地读出系统的当前时间,并且能在非常精确的时间间隔内完成一个事件、函数或过程的调用。不同之处在于调用DWORD timeGetTime(void) 函数之前必须将 Winmm.lib 和 Mmsystem.h 添加到工程中,否则在编译时提示DWORD timeGetTime(void)函数未定义。由于使用该函数是通过查询的方式进行定时控制的,所以,应该建立定时循环来进行定时事件的控制。如示例工程中的Timer5和Timer5_1。

如果你指的是嵌入式方面的,这样的延迟是有作用的,也是一种非精确计时器的一个实现方法。

我以12M的晶振为例,给你讲一下:
12M的晶振的机器周期是1/12M*12,就是1us

不同的单片机执行语句的机器周期也不一定一样(比如:Atmel 51系列及大多数51的一个机器周期是12个时钟周期,华邦的只需要4个时钟周期)。不过大体来说,一条for循环大概8个机器周期,在12M晶振下,通常用以下代码实现1ms的延时:
void delayms(unsigned int ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
大概算一下,120*8*1us=1ms,如果需要精确的定时,还是得用基于Tick定时器。

如果是
void delay(int d)
{
for(; d; --d);
}
d=1000的话,
那么
大概算一下,1000*8*1us=8ms
所以,这可以实现一个大体8ms的延迟

这种是在延时不精密的情况下用的,比起汇编准确的延时来说比较简单。但是误差比较大,具体延时时间可以看它转换成汇编语言是执行了多少语句。
用C语言写出来程序非常的简练,它是一种模块化的语言,一种比汇编更高级的语言,但是就是这样一种语言也还是有它不足之处:它的延时很不好控制,我们常常很难知道一段延时程序它的精确延时到底是多少,这和汇编延时程序没法比。但有时后写程序又不得不要用到比较精确的延时,虽然说可以用混合编程的方式解决,但这种方式不是每个人都能掌握,且写起来也麻烦。

在每台电脑上时不一样的,和CPU,内存有关,C语言中没有精确控制时间的函数


单片机延时的方法有哪些?
单片机常用的编程语言有汇编语言、C语言等。以下是使用汇编语言实现延时1s的程序:以上程序中,使用了一个8位计数器来实现延时功能。由于单片机晶振频率为12MHz,每个指令需要执行12\/4=3个机器周期(其中4代表指令周期),因此可以通过调整计数器初值来实现不同的延时时间。具体计算过程如下:每个指令需要执行...

c语言延时函数delay,怎么算延时??
下面是delay 函延迟函数里执行的都是空语句,也就是说通过循环执行空语句来达到延迟的目的.每执行一条语句,即使是空语句都要耗费电脑一些处理时间的,就是因为这个,在延迟函数里写一些无关紧要的东西,用来浪费电脑处理时间,从而达到延迟目的。数原型:原型:void Delay(unsigned int nDelay){ unsigned int...

C语言delay函数延时计算
C语言delay函数延时计算源代码如下:include "stdlib.h"void delay(){ time_t start,end;start=time(null);unchar i;while(z--){ for(i=0;i<121;i++);} end=time(null);printf("%f",difftime(end,start));}

易语言延时 和 延迟有什么区别
“延迟”,在执行时允许用户执行其它的操作(如:单击按钮等);“延时”,在执行时程序会进入“假死“状态,用户的其他操作程序将无法响应,必须等到语句执行结束才能恢复。学习,是指通过阅读、听讲、思考、研究、实践等途径获得知识和技能的过程。学习分为狭义与广义两种:狭义:通过阅读、听讲、研究、观察...

汇编语言延时程序,延时10毫秒的延时程序是什么?
首先明确机器执行一条指令耗时大概是1us那么延时10ms的程序如下:MOV AX,50L1:MOV BX,100L2:DEC BX JNZ L2DEC AXJNZ L1执行完之后时间大约为10ms多一点 根据具体问题类型,进行步骤拆解/原因原理分析/内容拓展等。具体步骤如下:/导致这种情况的原因主要是……

求解释!!!汇编语言:延时程序
则跳转到本行,也就是空转10次 DJNZ:R6,DL2 如果R6不等于0,则跳到DL2行,给R5赋值 DJNZ R7,DL1 如果R7不等于0,则跳到DL1行,给R6赋值 所以总的空转循环次数是250*100*10=250000次,通过调节R5,R6,R7值来控制延时时间

汇编语言中延时一毫秒是怎么写的
DELAY:MOV R7,#0 DE1:MOV R6,#80H DE2:NOP DJNZ R6,DE2 DJNZ R7,DE1 RET

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

单片机C语言编程中延时函数和定时器中断有何关系
定时器中断是在主程序中插入的事件,是在主程序的某个时间点,跳出主程序去执行定时器中断要做的事情。所以如果一个延时子程序不停地被中断(包括定时器中断或者其他中断)打断,就没有时间完成自身运行一次所需的那些语句。等到它自身运行完一次,可能原定延时时间的很多倍已经过去了。

用C语言编程如何计算延时时间?
而这种靠执行指令延时的程序的延时里昂:1.可以通过查看她的反汇编代码来分析得到。2.也可以通过定时计数器的获得。执行前从0开始计数启动定时器,然后以一定参数k调用delay,在返回后检查定时器的计数值 t。t = tc + k t0,tc是任何一次调用都具有的调用开销。t0时k=1时去掉调用开销tc的循环体执行...

昌吉回族自治州13394304331: C语言中用什么函数来延时 谢谢 -
贝峡安奇: 头文件里加上#include 函数是 ::Sleep(),注意前面有俩冒号,s大写,括号里填数字,表示毫秒

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

昌吉回族自治州13394304331: 求 用C语言编的延时程序 多写几种 交流用 谢谢 -
贝峡安奇: void delay() {unsigned char i,j;for(i=5;i>0;i--)for(j=14;j>0;j--); }void delay() {unsigned char i,j;for(i=0;i<5;i++)for(j=0;j<14;j++); }void delay1(int i) {while(i--); }

昌吉回族自治州13394304331: c语言延时程序的意思! -
贝峡安奇: 这种延时函数一般用于单片机C语言中 X一般默认为1,三个for嵌套循环,总共执行次数为,c*b*a=1*38*130=4940; 若是在主频为12MHZ的电路中,单片机执行一条语句时间大约为1us,那么这个延时为4940us,大约为5ms.你想延时多长时间,就取值X,乘以5ms,当然x不能超过字符型数据的取值范围.

昌吉回族自治州13394304331: C语言的延时计算 -
贝峡安奇: return 0; printf("n"); _sleep(1000); printf("Begin to sleep 2 seconds!\n".h> int main(void) { printf("n"); _sleep(3000); printf("Begin to sleep 4 seconds;Begin to sleep 1 seconds!\!\n&quot延时么? sleep可以用 #include printf("Begin to sleep 3 seconds!\!\n");); _sleep(4000);I am back; #include

昌吉回族自治州13394304331: 用C语言编写一段循环100次的延时程序. -
贝峡安奇: #include <stdio.h> int main() {int i; for(i=0;i<100;i++);return 0; }哈 你想多了把 额,你如果是说sleep那种形式的延时,可以在头上加#include <windows.h> 然后#include <stdio.h>#include <windows.h> int main() {int i,a=(1000); for(i=0;i<100;i++)...

昌吉回族自治州13394304331: C语言提供的延时操作函数是什么?
贝峡安奇: Sleep(100) 上面这个函数实现延时100ms,参数值可以改

昌吉回族自治州13394304331: C语言中,怎么实现延迟5秒钟? -
贝峡安奇: 用函数sleep(); 例子: main() {int a; scanf("%d",&a); sleep(5); printf("%d\n",a); }

昌吉回族自治州13394304331: c语言延时语句
贝峡安奇: #include<windows.h> 里面有一个Sleep()函数(注意首字母大写). 还有别的方法,个人觉得这个最简单了,下面是我从MSDN给你找的关于这个函数的详细资料 函数原形: VOID Sleep( DWORD dwMilliseconds // sleep time); Parameters

昌吉回族自治州13394304331: c语言中,求延时函数的用法.比如我要计算x+y的值,先打印出x,y的值,延时3秒再打印出x+y的值 -
贝峡安奇: 这样: #include <stdio.h> #include <windows.h>int main() {int x=1, y=2;printf("x=%d, y=%d\n", x, y);Sleep(3000);printf("%d+%d=%d\n", x, y, x+y);return 0; }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网