c语言程序暂停数秒的函数,C语言时间函数的应用.docx

C语言时间函数的应用

C语言时间函数的应用

C语言程序,常涉及时间的获取和计算,例如获取当前时间,倒计时计算,时间 差计算。

C/C++语言提供了一些库函数,可用于此目的。下面以VC++ 6.0编译器为例, 叙述C语言吋间函数的应用,调用吋间函数需头文件time, ho

获取现在吋间并打印

C语言提供函数timcO,可以获取现在时间。函数原型是 time_t time ( time_t *t);

你可攻通过实参获取时间,也可以通过返回值获取时间。例如:

timet now;

now 二 time (NULL);

或 time(&now);

得到的型数值是从1970年1月1日起到现在的秒数。 用C语言提供的函数ctime转换成字符串形式,打卬岀年月日时分秒。

见下面程序里的print_current_time()子程序。

获取现在吋间并转换成整数年月日吋分秒形式

C语言提供的函数localtimc(),可以把timc_t数值转换成tm结构,tm结构 里含年月日时分秒和是否是闰年等信息,结构里的年加1900是真实的年,结构 里的月加1是真实的月。

见子程序 get_current_YMD()?

输入年月日计算这天是该年的第几天

当我们要绘制某年度的统计数据时,常以天做横座标按比例绘图,这时就需要把 月FI换算为天。

把日加上前几个月的天数就可得结果。只要注意该年是平年还是闰年,闰年的2 月份多一天。闰年的判断是:

if ((Y%4==0)&&(Y%100!=0) | | (Y%400==0) {printff 闰年〃);} 见子程序YMD_2_JD ();

输入年月日计算这天是星期几

公元计年从1年1月1日开始,这天是星期一。平年一年有365天,365除7取 余数为1。也就是说平年的星期几等于上一年的星期几加1。闰年的星期几等于 上一年的星期几加2。

所以,若知年份,就可以推算出这年元旦推移了多少天,变星期几,再调用 YMD_2」D(),算出某月某日推移了多少天,就算得这天是星期几。

见子程序 YMD_2JVeekDay ()。

输入整型值年月日时分秒转换为time_t 库函数mktime,可以把tm结构转换为time_t。

我们可以用1 ocaltimc把当前时间转为tm结构,再修改里面的年月口时分秒, 这样,tm里的其它项,例如星期几,这天是该年的第几天等成员变量会自动改 正,不须自己操心。然后调mktime,得到time_t型吋间值。

暂停多少秒或多少毫秒的控制

暂停,可以用Windows, h里的Sleep()函数,也可以自己写。

Sleep(1000);参数是1000毫秒,就是暂停1秒。一般人认为,Sleep函数, 每秒可能有25毫秒误差。

自己写,可以利用clock ()函数,clock ()函数送返从程序开始运行到调用 吋的吋间间隔,单位是毫秒。暂停开始,用clock ()取开始I]寸间,然后,只要 用clock ()再取时间,判断是否到结束时间,没到则继续暂停。

见子程序 wait (int seconds) 和 wait ms ( int ms )。

倒计时

输入目标年月日吋分秒,显示倒计吋。

先把目标日期转换为然后取当前时间,用库函数difftime ()计算时 间差单位秒,折算成倒计时时分秒。

见子程序time downO

时间差计算

获取时间差有多种方法。简单方法是用clock ()函数。clock ()函数返回当时时 间读数,计吋开始用clockO得到开始吋间,计吋结束,用clockO得到结束吋 间,两个数相减就是时间差,单位是毫秒。

见子程序 example dt ms ()。

另一种方法是用QueryPerformanceCounter ()函数返回当时时钟读数,计时开 始用它得到开始读数,计时结束用它得到结束读数,两个数相减是时间差读数。 读数转换为吋间,要用QueryPerformanceFrequency ()函数获得吋钟频率,读 数除以时钟频率,得时间,单位是秒。乘1000得毫秒。据说,这种方法比较精 确。

见 了程序 accurate dt ms ()。

还有一种方法是用Pentium芯片汇编指令0x0F和0x31,读取时钟计数图章, 类似QueryPerformanceCounter ()函数,计时开始和结束分别调用一次,得读 数差,并扣除执行一次调用函数消耗的额外时间。读数差怎样转化成时间是个问 题,如果知道CPU速度可以算得时间,如果知道时间,可以估算CPU速度。子程 序get_CPU_speed()计算CPU的速度,单位百万赫。

完整的C语言示范程序如下:

ttdefine N0MINMAX

ttinclude

ttinclude

#

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值