延时程序????

hua_zhixing_ 2009-03-15 09:17:39
void delay(int a){
int sum=0;
for(int i=1;i<=a;++i)
for(int j=1;j<3500;++j)
for(int k=1;k<100000;++k);
sum++;
}
这是怎么实现延时的,又怎么判断????好像不用这个函数也行。
...全文
281 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
virtualzege 2012-08-09
  • 打赏
  • 举报
回复
用Sleep简直像死机一样,而且还折腾CPU。得不偿失!
  • 打赏
  • 举报
回复
LS的几个,如果平台支持的话,谁会没事找抽加一大堆循环指令去耗cpu的时间。。。。
liwenchao0309 2009-03-16
  • 打赏
  • 举报
回复
可以调用sleep函数实现同样的功能:
头文件:#include<windows.h>
函数:Sleep(毫秒);//注意Sleep中S的大小写,有些工具支持小写,1秒=1000毫秒
何哀何欢 2009-03-16
  • 打赏
  • 举报
回复
精度和CPU使用量有关。
grellen 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hqin6 的回复:]
呵呵,这样做不好~~~
这只是让cpu重复做一些无谓的事儿

而不能把这部分延迟时间去做其他事儿,所以比较笨~
[/Quote]

up
mengde007 2009-03-15
  • 打赏
  • 举报
回复
sleep() 睡一觉不就行了吗?
cheidtf 2009-03-15
  • 打赏
  • 举报
回复
一般都用sleep()就可以啊!
sleep(1000);//这样就表示大概延时一秒钟啊.

现在的CPU的主频都很高,能做的运算肯定是越来越快.

for(int j=1;j <3500;++j)
for(int k=1;k <100000;++k);
sum++;

这样的CODE在不同的主频的CPU上运时时间肯定不同,不好控制.
wxgiter 2009-03-15
  • 打赏
  • 举报
回复
#include<iostream>
#include<ctime>

int main()
{
using namespace std;
cout<<"Enter the delay time,in seconds:";
float secs;
cin>>secs;
clock_t delay=secs*CLOCKS_PER_SEC;
cout<<"strating:\a\n";
clock_t start=clock();
while(clock()-start<delay)
;
cout<<"done\a\n:";
return 0;
}

这个可以实现延时……
huabinsir 2009-03-15
  • 打赏
  • 举报
回复
这样延时可能会更好些,请高手指正.


DWORD dwStart = GetTickCount();
DWORD dwEnd = dwStart;
do
{

////系统交出控制权(语句)
让其它进程占用 CPU 机时, 而不是自已消耗 CPU 机时.
////系统交出控制权

dwEnd = GetTickCount()-dwStart;
}while (dwEnd <5000);
hua_zhixing_ 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dongpy 的回复:]
下面这段代码的执行时间是固定的,假设为T
for(int j=1;j <3500;++j)
for(int k=1;k <100000;++k);
sum++;

那么delay(int a)的延时时间为:a*T
[/Quote]又是怎么计算时间的呀???
我用clock()去输出时间时,怎么每次都有出入???
太乙 2009-03-15
  • 打赏
  • 举报
回复
呵呵,这样做不好~~~
这只是让cpu重复做一些无谓的事儿

而不能把这部分延迟时间去做其他事儿,所以比较笨~
dongpy 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 haoshen1987 的帖子:]
这是怎么实现延时的,又怎么判断????好像不用这个函数也行。
[/Quote]
平台不支持sleep函数时,才会用这种方法延时。

下面这段代码的执行时间是固定的,假设为T
for(int j=1;j<3500;++j)
for(int k=1;k<100000;++k);
sum++;

那么delay(int a)的延时时间为:a*T
chin_chen 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 haoshen1987 的帖子:]
C/C++ codevoiddelay(inta){intsum=0;for(inti=1;i<=a;++i)for(intj=1;j<3500;++j)for(intk=1;k<100000;++k);
sum++;
}这是怎么实现延时的,又怎么判断????好像不用这个函数也行。
[/Quote]

while(true)
{
sleep(3000),
}
sagegz 2009-03-15
  • 打赏
  • 举报
回复
折磨CPU...

;延时0.5s子程序DELAY如下:
DELAY PROC
PUSH CX
PUSH DX

MOV DX,50;0.5 s=500 ms
DL500:;50 ms =50,000 us
MOV CX,2801
DL10MS:;50,000 us/2801=17.850767583006069260978222063549 us-->9.4 period
LOOP DL10MS;17/5 period
DEC DX;2
JNZ DL500;4

POP DX
POP CX
RET
DELAY ENDP
shilingk1 2009-03-15
  • 打赏
  • 举报
回复
不用啊,多写几个嵌套循环,后面加一个“;”,就可以了,呵呵
liusichen_0 2009-03-15
  • 打赏
  • 举报
回复
为什么不用定时器呢,时间到了以后系统会有事件通知的

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧