函数:
创新互联公司-专业网站定制、快速模板网站建设、高性价比东乌珠穆沁网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式东乌珠穆沁网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖东乌珠穆沁地区。费用合理售后完善,十载实体公司更值得信赖。
voiddelay(uinti)
{
while(i)i--;
}
这样的延迟设计很不好,因为受影响的因素太多。
首先就是机器的CPU频率,快的CPU执行i--这句的机器时间短,慢的机器就很慢。
其次是当前机器的负荷情况,负荷较重时,系统给当前进程分配的CPU时间少,执行这些语句的机会就少,延迟就增加了。
影响因素还有很多在此不再列举。
做延迟程序主要有以下几种方法:
1.定时器法
用CWnd::SetTimer()函数设置定时器,当定时时间到时发送WM_TIMER消息触发CWnd::OnTimer()函数,重载它把自己的代码放进去。
SetTimer()参数为毫秒,此方法定时不高,受系统负荷影响。
2.休眠法
调用系统API函数Sleep(2000);参数单位是毫秒,2000代表2秒。
此方法主要收到当前系统负荷的影响,定时不太准确
3.时刻比较法
定义两个CTime变量,一个用于记录起始时刻,另一个放在循环体中不断刷新当前时刻,并减去起始时刻,自己计算是否到时间了。
此方法因CTime变量只能获取秒级的时刻,且收到系统负荷影响,精度也较低。
4.CPU滴答查询法
利用两个API函数QueryPerformanceFrequency()和QueryPerformanceCounter()分别获取CPU的频率和CPU滴答数,依时刻比较法自己计算时刻差值。
因为CPU滴答数是等于CPU的机器周期的,所以是Windows系统里最最精确的计时方法了。现在的CPU主频都是GHz级的,因此理论上计时精度可以到纳秒。
只要系统负荷不太重,此法可用于极其精确的延时程序。
因为Windows并不是实时操作系统,因此对于太过精确的计时,还是无能为力的。
1、sleep()函数:秒级休眠函数
#include unistd.h
unsigned int sleep(unsigned int unSeconds);
参数unSeconds表示需要休眠的秒数;
2、usleep()函数:微秒级休眠函数;
#include unistd.h
int usleep(useconds_t lMicroSeconds);
参数lMicroSeconds表示要休眠的微秒数;
#ifndef _SUSECONDS_T
#define _SUSECONDS_T
typedef long suseconds_t; /* signed # of microseconds */
#endif /* _SUSECONDS_T */
类型useconds_t定义在头文件/usr/include/sys/types.h中;
3、nanosleep()函数:纳秒级休眠函数;
#include time.h
int nanosleep(const struct timespec* rqtp, struct timespec* rmtp);
4、其它休眠函数:
select()、pselect()、poll();等;
select()函数也可以精确到微秒,pselect()函数也可以精确到纳秒。
clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t。
它的具体功能是返回处理器调用某个进程或函数所花费的时间。函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,其中clock_t是用来保存时间的数据类型。
在time.h文件中,我们可以找到对它的定义:
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
clock_t其实就是long,即长整形。该函数返回值是硬件滴答数,要换算成秒或者毫秒,需要除以CLK_TCK或者 CLK_TCK CLOCKS_PER_SEC。比如,在VC++6.0下,这两个量的值都是1000,这表示硬件滴答1000下是1秒,因此要计算一个进程的时间,用clock()除以1000即可。
clock的返回值一直是0的原因:
1、编译器优化,for循环实际根本没执行,直接跳过去了,所以时间为0。
2、clock计算的是程序占用cpu的时间,如果你的程序执行的动作很少,那么clock算出的时间也很少。
3、建议使用time gettimeofday函数来计时。
扩展资料:
C语言中clock()函数的程序例1:(TC下运行通过)
#include stdio.h
#include time.h
int main(void)
{
clock_t start, end;
start = clock();
delay(2000);
end = clock();
printf("The time was: %f\n", (double)(end - start) / CLK_TCK);
return 0;
}
说明:CLK_TCK 定义在TC中的time.h中:#define CLK_TCK18.2。
在VC6.0中也有关于CLK_TCK的宏定义,不过其值不再是18.2,而是1000。
实际上在VC6.0中CLK_TCK已完全等同CLOCKS_PER_SEC。
参考资料来源:百度百科-clock()
循环j*8505次.
假设j开始等于100,
while外循环则循环100次,
每次执行一次内循环,
内循环每次执行8505次.
总共100*8505次.
你这个硬件处理器的频率可能运算8505次计算为1秒(或毫秒/微秒/纳秒),
然后delay函数实现循环n秒(或毫秒/微秒/纳秒).
应该不是秒,
1秒才运算8000多次的话那.....
C语言获取当前系统时间的几种方式
C语言获取系统时间的几种方式
C语言中如何获取时间?精度如何?
1 使用time_t time( time_t * timer ) 精确到秒
2 使用clock_t clock() 得到的是CPU时间精确到1/CLOCKS_PER_SEC秒
3 计算时间差使用double difftime( time_t timer1, time_t timer0 )
4 使用DWORD GetTickCount() 精确到毫秒
5 如果使用MFC的CTime类,可以用CTime::GetCurrentTime() 精确到秒
6 要获取高精度时间,可以使用
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)
获取系统的计数器的频率
BOOL QueryPerformanceCounter(LARGE_INTEGER
*lpPerformanceCount)
获取计数器的值
然后用两次计数器的差除以Frequency就得到时间。
7 Multimedia Timer Functions
The following functions are used with multimedia timers.
timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime
哥们 实现不了的 受机器体系结构和处理器限制 时间相关的都是用汇编做的 这样才能精确计算时间
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款