C语言计时程序
c语言 ACM的计时规则解答

ACM的计时规则Time Limit:1000MS Memory Limit:65536KTotal Submit:240 Accepted:158DescriptionACM的比赛是充满挑战的比赛.它的计时规则也与众不同.当比赛开始后,计算每道题目用时是重复计算的.比方:选手做A需要10分钟,做B需要20分钟,那么当选手分别在10分和30分时做出两个题目后,系统给你统计的时间是40分(10+30,0-10这10分钟做A,10-30这20分钟做B),换句话说它并不关心你做一个题目真实用的时间,而只关心你到做出这个题目为之总共用去了多少时间.在这样的规则下,你做题顺序将影响到你最终统计的时间.如:先做B后做A则统计时间20+30=50,先做A后做B时间统计为10+30=40.现在你有N个题目,并且假定已经知道你做出一个题目需要的时间ti,现在要你求出某个做题顺序,使总的统计时间最少.为了简单,不需要你给出做题顺序,只要给出最少的时间就可以了.Input只有2行,第一行一个整数N(N<20),表示题目的个数.第二行有N个整数,由空格隔开,分别表示做出一个题目需要的时间.Output只有一行,有一个整数,表示最少的总计时间.注意输出整数后,不要忘记输出换行!Sample Input220 10Sample Output40∙代码已通过调试。
∙∙#include<stdio.h>∙#include<math.h>∙int main()∙{∙ int i,a[20],k,s,n,index,temp,t; ∙ scanf("%d",&n);∙ for(i=0;i<n;i++)∙ scanf("%d",&a[i]);∙∙ for(k=0;k<n-1;k++)∙ {∙ index=k;∙ for(i=k+1;i<n;i++)∙ if(a[index]>a[i]) index=i; ∙∙ temp=a[index];∙ a[index]=a[k];∙ a[k]=temp;∙ }∙ s=0;t=0;∙ for(i=0;i<n;i++)∙ {∙ t=t+a[i];∙ s=s+t;∙ }∙ printf("%d\n",s);∙ return 0;∙}。
C语言中的延时与计时技巧

C语言中的延时与计时技巧
一、延时技巧
1.延时的定义:控制程序中当前语句的后一语句,延缓一段时间再执行。
2.C常用的两个延时函数:
(1) delay函数。
书写格式:delay(数值)。
其中,括号中的整型数值取值范围0 ~ 32767之间。
注意:这个数值与计算机主机的频率有关,因此在不同的计算机上,同样的延时数值,会得到不同的延时效果。
(2) sleep (数值)。
(睡眠函数)
书写格式:sleep (数值)。
其中数值是以秒为单位,用在动态显示中最少一秒变化一次,那会有明显的停顿感觉。
二、计时技巧
1.计时的定义:计算程序中某段程序的运行时间。
2.计时程序使用条件:
(1)使用头部文件:
#include <time.h>
(2)使用当前时间的时钟函数:
clock()
(3)使用时间一秒常数:
CLK_TCK
例如:
A.在“蛇吃蛋”的程序中,要引入计时程序,则:在进入while(1)循环前,先要取得计时开始时的那一时刻,使用变量t0表示。
即:
t0 = clock();
B.在while(1)循环的最后处,再取当前时刻,使用变量t1表示。
即:
t1=clock();
C.t1 和t0 之差即为所经历的时间,即;
t = (t1-t0 );
D.转换成秒:
sec=t/CLK_TCK;。
定时器c语言程序

定时器c语言程序#include#define uint unsigned int#define uchar unsigned charsbit gw=P1^4; //数码管各位位选sbit sw=P1^5; //十位位选sbit SPEAK=P1^6; //定义蜂鸣器uchar num,num1,tt,shi,ge,t; //tt为设定值,t为当前计数值uchar code table[]={0x88,0x9F,0xA4,0x85,0x93,0xC1,0xC0,0x8F,0x80,0x81,0x82,0xC8,0xE8,0xA1,0x86,0x8E}; //数码管显示段码void delay(uint z); //延时子函数声明void play(uchar aa); //数码管显示子函数声明void SPK_T est( void ); //蜂鸣器控制子函数void Init(); //初始化子函数声明void KeyScanf(void); // 键盘扫描void main(){Init(); //初始化for(num1=60;num1>0;num1--)play(tt);t=tt;while(1){KeyScanf();while(t==0){TR0=0; //定时时间到停止定时器工作SPK_T est();t=60;break;}play(t); //显示当前剩余定时时间}}/********************************************************** *名称:void Init()*功能:初始化定时器0等***********************************************************/ void Init(){EA=1; //开总中断ET0=1; //开定时器0中断tt=60; //设定默认定时时间(一分钟)num=20;TMOD=0x01; //设置定时器0为工作方式1TH0=(65536-50000)/256; //定时器0设定50ms定时初值TL0=(65536-50000)%256;SPEAK=0;}/*******************************************函数名:按键扫描描述:*******************************************/void KeyScanf(void){if((P1&0x0f)!=0x0f) //检查按键{delay(20);if((P1&0x0f)!=0x0f) //检查按键{delay(20);if(!(P1&0x01))while(1){ TR0=0;play(tt);if(!(P1&0x02)){tt++;play(tt);}else if(!(P1&0x04)){tt--;play(tt);}if(!(P1&0x08)){TR0=1;t=tt;break;}}if((TR0==1)&&(!(P1&0x08))) {if(!(P1&0x08)){TR0=0; //停止delay(20);}}if((TR0==0)&&(!(P1&0x08))){{TR0=1; //启动delay(20);}}}}}/************************************************************** *名称: Delay_NS()*功能: 长软件1ms延时*************************************************************** /void delay(uint ms){uchar i;while(ms--) //ms毫秒软件延时{for(i = 63;i > 1;i--);}}/************************************************************函数名称:定时器0中断服务子程序功能:重装初并重启定时器值,定时中断满20次(1s),计数减1************************************************************/ void time0() interrupt 1 //定时器0中断子函数{if(num>0){num--;}else if(num==0){t--;num=20;}TH0=(65536-50000)/256; //重装定时器初值TL0=(65536-50000)%256;ET0=1;TR0=1; //重新启动T0}/************************************************************** *名称: void play(uchar)*功能: LED数码管显示0-F字符,同时控制2个数码管显示对应的十六进制数*************************************************************** /void play(uchar aa) //数码管显示子函数{shi=aa/10;ge=aa%10;P0=table[ge];gw=0;delay(20); // 延时显示gw=1;P0=table[shi];sw=0;delay(20); // 延时显示sw=1;}/******************************************* 函数名:SPK_test()描述:蜂鸣器控制*******************************************/ void SPK_T est( void ){unsigned int i = 0;unsigned char j,k,m = 34;for(j = 0;j < 8;j ++){m -=1;for(i = 0;i < 2000;i ++ ){SPEAK = ~SPEAK;for(k = m;k > 1;k--);}delay(15);}SPEAK =0;}。
C语言实现秒表

源代码如下(作者:中南大学通信工程1602肖涛,qq:2391527690)#include<stdio.h>#include<conio.h>//_kbhit#include<windows.h>#include<stdlib.h>struct t{intho,mi,se;}ti;struct t carry(struct t sj){ sj.se++;if(sj.se==60){sj.se=0;sj.mi++;}if(sj.mi==60){sj.mi=0;sj.ho++;}if(sj.ho==24)sj.ho=0;return(sj);}void showtime(struct t sj){system("cls");printf("\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t");printf("秒表显示器:");if(sj.se<10&&sj.ho<10&&sj.mi<10)//控制计时时时间显示格式printf("0%d:0%d:0%d\n",sj.ho,sj.mi,sj.se);if(sj.se>=10&&sj.ho<10&&sj.mi<10)printf("0%d:0%d:%d\n",sj.ho,sj.mi,sj.se);if(sj.se<10&&sj.mi>=10&&sj.se<10)printf("0%d:%d:0%d\n",sj.ho,sj.mi,sj.se);if(sj.se<10&&sj.mi<10&&sj.ho>=10)printf("0%d:0%d:%d\n",sj.ho,sj.mi,sj.se);if(sj.se>=10&&sj.mi>=10&&sj.ho<10)printf("0%d:%d:%d\n",sj.ho,sj.mi,sj.se);if(sj.se>=10&&sj.mi<10&&sj.ho>=10)printf("%d:0%d:%d\n",sj.ho,sj.mi,sj.se);if(sj.se<10&&sj.mi>=10&&sj.ho>=10)printf("%d:%d:0%d\n",sj.ho,sj.mi,sj.se);if(sj.ho>=10&&sj.mi>=10&&sj.se>=10)printf("%d:%d:%d\n",sj.ho,sj.mi,sj.se);}void main (){char m,n;ti.ho=ti.mi=ti.se=0;printf("\t*************************************************\n");printf("\t\t 欢迎使用秒表功能\n");printf("\t\t操作提示:第一次按回车开始计时!\n");printf("\t\t按z暂停,第二次按回车结束秒表程序\n");while(1){m=getch();if(m!='\r')//读入一个输入,如果是回车,跳出while printf("\t\t输入错误,仅能输入回车!\n");elsebreak;}printf("\t\t已经开始计时,但你可以输入'z'来暂停计时\n");while(1){if(_kbhit())//判断是否键入字符{m=getch();if(m=='\r')break;if(m!='\r'&&m!='z')printf("\n输入错误,仅支持回车或'z'\n");if(m=='z'){system("cls");printf("当前时间:");if(ti.se<10&&ti.mi<10&&ti.ho<10)printf("0%d:0%d:0%d\n",ti.ho,ti.mi,ti.se);if(ti.se>=10&&ti.ho<10&&ti.mi<10)//控制暂停时时间显示格式printf("0%d:0%d:%d\n",ti.ho,ti.mi,ti.se);if(ti.se<10&&ti.mi>=10&&ti.se<10)printf("0%d:%d:0%d\n",ti.ho,ti.mi,ti.se);if(ti.se<10&&ti.mi<10&&ti.ho>=10)printf("0%d:0%d:%d\n",ti.ho,ti.mi,ti.se);if(ti.se>=10&&ti.mi>=10&&ti.ho<10)printf("0%d:%d:%d\n",ti.ho,ti.mi,ti.se);if(ti.se>=10&&ti.mi<10&&ti.ho>=10)printf("%d:0%d:%d\n",ti.ho,ti.mi,ti.se);if(ti.se<10&&ti.mi>=10&&ti.ho>=10)printf("%d:%d:0%d\n",ti.ho,ti.mi,ti.se);if(ti.ho>=10&&ti.mi>=10&&ti.se>=10)printf("%d:%d:%d\n",ti.ho,ti.mi,ti.se);printf("\n按任意键继续\n");while(1){Sleep(500);if(_kbhit())//如果有输入会连续判断两个kbhit(),并把输入赋给ch,所以找个替罪羔羊n{n=getch();break;}}}}Sleep(1000);ti=carry(ti);showtime(ti);}system("cls"); }。
C#实现秒表程序

C#实现秒表程序在部分效率测试的项⽬中,很多时候需要使⽤到秒表,虽然⽹上有可⽤的运⾏版本,但是加⼊不了⾃⼰的需求,于是就使⽤C#来写⼀个。
程序的逻辑很简单,就是使⽤⼀个时钟,把时间间隔设置为1。
但是当时间间隔⼩于100毫秒时,再加上程序执⾏上的耗时,如果使⽤计数器来统计时间,哪时间就变得很不精确了,为了得到较为精确的计时,我们不使⽤计数器,⽽是时钟每次触发时,就使⽤当前的时间和最初的时间差,即刻度。
可以使⽤Stopwatch类,本程序使⽤的是取系统的当前时间。
实现⽚断:System.Windows.Forms.Timer m_Timer = new Timer();m_Timer.Interval = 1;在Timer的Tick事件⾥的实现,使⽤TimeSpan作为时间刻度:TimeSpan span = DateTime.Now - m_StartTime;DateTime n = new DateTime(span.Ticks);lblTime.Text = n.ToString("HH:mm:ss:fff");这样就算Tick的触发不是很准确,但也不影响计算的时间间隔。
在程序实现屏幕截图:Image img = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);Graphics g = Graphics.FromImage(img);g.CopyFromScreen(new Point(0, 0), new Point(0, 0), img.Size);g.Dispose();Clipboard.SetDataObject(img, false);其他的细节就不再细述了,使⽤都⾃⼰完成,所以也不上传原码了。
c定时执行方法

c定时执行方法介绍在C语言中,定时执行方法是一种常用的编程技巧。
通过定时执行方法,我们可以在程序运行的过程中按照指定的时间间隔执行一段代码,以实现某种特定的功能或任务。
定时执行方法广泛应用于各个领域,例如定时发送消息、定时更新数据、定时执行定期任务等。
本文将详细介绍C语言中的定时执行方法及其相关内容。
定时执行方法的原理定时执行方法的实现原理基于计时器的概念。
计时器可以在程序运行的过程中不断累加时间,当累加时间达到设定的时间间隔时,就执行预定的代码。
C语言中常用的定时器有两种:软件定时器和硬件定时器。
软件定时器软件定时器是通过程序计数器实现的。
程序计数器是一个变量,其值会不断增加,表示程序当前执行的位置。
我们可以通过在程序的某个位置设置定时器,并根据程序计数器的值来判断是否达到了设定的时间间隔。
一旦达到时间间隔,就执行预定的代码。
软件定时器的精度相对较低,但在大部分应用场景下已经足够使用。
硬件定时器硬件定时器是通过芯片内部的计时器电路实现的。
硬件定时器具有更高的精度和稳定性,且不受程序计数器的影响。
我们可以设置硬件定时器的计时频率和时间间隔,当计数器的值达到设定的时间间隔时,就触发定时器中断,从而执行预定的代码。
硬件定时器适用于对时间要求较高的应用场景。
定时执行方法的应用定时执行方法在各个领域都有广泛的应用,包括但不限于以下几个方面:定时发送消息在很多网络应用中,需要定时发送消息以保持与其他设备的通讯。
通过定时执行方法,我们可以周期性地发送指定的数据包或命令,以实现设备之间的数据交换。
定时发送消息通常需要提供的参数包括发送的目标设备地址、数据包内容以及发送的时间间隔。
定时更新数据在一些监控系统、数据采集系统中,需要周期性地从传感器或其他设备读取数据,并对数据进行处理或上报。
通过定时执行方法,我们可以定时触发读取数据的操作,并将读取到的数据传递给后续的处理模块。
定时更新数据通常需要提供的参数包括读取数据的设备地址、数据处理的代码块以及更新的时间间隔。
C语言Windows程序设计——使用计时器
C语⾔Windows程序设计——使⽤计时器传统意义上的计时器是指利⽤特定的原理来测量时间的装置, 在古代, 常⽤沙漏、点燃⼀炷⾹等⽅式进⾏粗略的计时, 在现代科技的带动下, 计时⽔平越来越⾼, 也越来越精确, 之所以需要进⾏计时是在很多情况下我们需要知道时间已经过去了多少, 举例说, 上课下课的打铃、考试时的计时、车站按时间间隔进⾏发车等。
不仅在⽇常⽣活中会应⽤到计时, 在⼀些电⼦设备中计时的普遍存在, 如⼿机⾥的闹钟、电⼦秒表、电⼦设备的定时关机等, 这些计时的⽬的都是相同的, 当达到⼀定时间后执⾏某件事, 计时器相当于提醒作⽤, 当达到某个时间后提醒⼈们或者机器该做某件事了。
在Windows系统中, 计时器作为⼀种输⼊设备存在于系统中, 当每到⼀个设定的时间间隔后它都会向应⽤程序发出⼀个 WM_TIMER 的消息, 以提醒程序规定的间隔时间已经过去了, 计时器在程序中的应⽤⼗分⼴泛, 举些我们容易想到的⽰例:1>. 游戏这控制物体的移动速度, ⽐如说某个物体每100毫秒移动某个单位距离;2>. ⽂件的⾃动保存, 当⽤户编辑某些⽂件时5分钟⾃动保存⼀次, 避免因意外情况造成编辑的成果全部丢失;3>. 实现程序的⾃动退出, 当程序达到某个设定的时间后程序⾃动退出;⼀、使⽤计时器计时器的使⽤主要分为创建、处理、销毁三个部分。
①. 创建: 创建⼀个计时器并设定其定计时器的任务周期, 例如每5秒向程序发送⼀条 WM_TIMER 消息 ;②. 处理: 根据接收到的 WM_TIMER 消息让程序作出响应的处理 ;③. 销毁: Windows的计时器属于系统资源, 在使⽤完毕后应及时销毁。
1>. 计时器的创建要创建⼀个计时器可以使⽤ SetTimer 函数, SetTimer函数的原型: UINT_PTR SetTimer( HWND hWnd, //窗⼝句柄 UINT_PTR nIDEvent, //定时器的ID UINT uElapse, //间隔时间, 单位为毫秒 TIMERPROC lpTimerFunc //所使⽤的回调函数 ); 参数说明:参数⼀窗⼝句柄即为接收 WM_TIMER 消息的窗⼝句柄;参数⼆为设置该计时器的ID, ⽤于与其他的计时器进⾏区分;参数三为计时器发送 WM_TIMER 消息的时间间隔, 单位为毫秒, 最⼤可设置的时间间隔为⼀个 unsigned long int 型所能容下的数据⼤⼩,为 4 294 967 295 毫秒(约合49.7天), 当设定的时间间隔到了后Windows就会向应⽤程序的消息队列放⼊⼀个 WM_TIMER 消息 ;参数四为定时器所使⽤的回调函数, 当使⽤回调函数时, 所产⽣的 WM_TIMER 消息⾃动调⽤回调函数进⾏处理。
定时闹钟C语言程序
定时闹钟C语言程序#include //头文件#include#define uchar unsigned char//宏定义#define uint unsigned intsbit key1=P3^5; //位声明sbit key2=P3^6;sbit key3=P3^7;sbit fmq=P2^0;uchar code table[]={0x3f,0x06,0x5b,//数码管显示的数值0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0xbf,0x86,0xdb,//带小数点的数值0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};void jia(); //函数声明void jian();uchar table_1[6]; //定义数组,数组内含有6个数值uchar table_2[6];uchar shi=23,fen=59,miao=50; //显示初始值uchar shi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3;//定义全局变量uchar flag,flag1,cnt,count;//定义全局变量void delay(uchar i) //延时函数,用于动态扫描数码管{uchar x,y;for(x=i;x>0;x--)for(y=110;y>0;y--);}void init() //初始化函数{TMOD=0X01; //工作方式1TH0=(65536-50000)/256; //定时时间为:50ms TL0=(65536-50000)%256;ET0=1; //打开定时器EA=1; //开总中断TR0=1; //启动定时器}void display() //显示子函数,用于显示时间数值{uchar i,j;table_1[0]=miao%10; //分离秒的各位与十位table_1[1]=miao/10;table_1[2]=fen%10+11; //分离分的各位与十位table_1[3]=fen/10;table_1[4]=shi%10+11; //分离时的各位与十位table_1[5]=shi/10;j=0x7f; //从秒到时的扫描for(i=0;i<6;i++){P2=j;P0=table[table_1[i]];//显示数值delay(10);j=_cror_(j,1);//循环右移}}void display_1() //显示子函数,用于显示定时时间{ uchar i,j;table_2[0]=miao2%10; //以下含义同上table_2[1]=miao2/10;table_2[2]=fen2%10+11;table_2[3]=fen2/10;table_2[4]=shi2%10+11;table_2[5]=shi2/10;j=0x7f;for(i=0;i<6;i++){P2=j;P0=table[table_2[i]];delay(10);j=_cror_(j,1);}}void shijian() //时间子函数{if(flag>=20) //判断是否到一秒{flag=0; //到了,则标志位清零miao++; //秒加1if(miao>=60) //判断秒是否到60s {miao=0;//到了,则清零fen++; //分加1if(fen>=59) //以下含义同上{fen=0;shi++;if(shi>23)shi=0;}}}}void key_scan() //键盘扫描子函数{uchar i; //定义局部变量if(key1==0){while(!key1) //防止掉显{if(cnt==0||cnt==1||cnt==2||cnt==3||cnt==4||cnt==8) {display();}if(cnt==5||cnt==6||cnt==7){display_1();}}cnt++; //记下按键key1按下的次数if(cnt==1) //第一次按下,停止计数TR0=0;if(cnt==2) //第二次按下{miao1=miao; //保存秒的数值miao=99;//显示99,表示可以调节秒的数值了for(i=0;i<100;i++)display(); //显示99miao=miao1; //恢复前一刻秒的数值}if(cnt==3) //以下含义同上{fen1=fen;fen=99;for(i=0;i<100;i++) display();fen=fen1;}if(cnt==4){shi1=shi;shi=99;for(i=0;i<100;i++) display();shi=shi1;}if(cnt==5){miao1=miao2; miao2=88;for(i=0;i<100;i++) display_1();miao2=miao1;}if(cnt==6){fen1=fen2;fen2=88;for(i=0;i<100;i++) display_1();fen2=fen1;}if(cnt==7){shi1=shi2;shi2=88;for(i=0;i<100;i++)display_1();shi2=shi1;}if(cnt==8) //第八次按下{TR0=1; //开始计数cnt=0; //按下次数清零}}if(key2==0) //判断key2是否按下{while(!key2) //防止掉显{if(cnt==0||cnt==1||cnt==2||cnt==3||cnt==4||cnt==8) {display();}if(cnt==5||cnt==6||cnt==7){display_1();}}jia();//调用加1的子函数}if(key3==0) //判断key3是否按下while(!key3) //防止掉显{if(cnt==0||cnt==1||cnt==2||cnt==3||cnt==4||cnt==8) {display();}if(cnt==5||cnt==6||cnt==7){display_1();}}jian(); //调用减1子函数}}void jia() //加1子函数{if(cnt==2) //判断key1按下的次数是否为2{miao++; //是,则秒加1if(miao>59) //判断秒是否大于59,是,则秒清零miao=0;}if(cnt==3) //以下含义同上{fen++;if(fen>59)fen=0;}if(cnt==4)shi++;if(shi>23)shi=0;}if(cnt==5){miao2++;if(miao2>59)miao2=0;}if(cnt==6){fen2++;if(fen2>59)fen2=0;}if(cnt==7){shi2++;if(shi2>23)shi2=0;}}void jian() //减1子函数{if(cnt==2) //判断key1按下的次数是否为2,是则秒减1 {miao--;if(miao==255) //判断秒是否减到255,是,则秒清零miao=59;}if(cnt==3) {fen--;if(fen==255) fen=59;}if(cnt==4) {shi--;if(shi==255) shi=23;}if(cnt==5) {miao2--;if(miao2==255) miao2=59;}if(cnt==6) {fen2--;if(fen2==255) fen2=59;}if(cnt==7) {shi2--;if(shi2==255)shi2=23;}}void clock() //闹铃子函数{if(miao2==miao) //显判断秒的数值是否相等if(fen2==fen) //是,在判断分是否相等if(shi2==shi) //是,再判断时是否相等{flag1=0; //是,则标志位,flag1清零while(!(flag1==100)) //判断flag1是否到100{fmq=0; //没有,则,继续驱动蜂鸣器响,时间约为:5s shijian(); //调用时间子函数display(); //调用显示子函数}fmq=1;//关闭蜂鸣器}}void main(){init();//调用初始化子函数while(1){key_scan(); //调用键盘扫描子函数shijian(); //时间子函数clock(); //闹钟子函数//显示子函数if(cnt==0||cnt==1||cnt==2||cnt==3||cnt==4||cnt==8) {display();}if(cnt==5||cnt==6||cnt==7){display_1();}}}void time0() interrupt 1 //定时器0{TH0=(65536-50000)/256; //初值50msTL0=(65536-50000)%256;flag++; //标志位flag1++;}参考链接:/doc/d415749112.html,/news/2010-02/1914.htm。
C++常见程序计时方法
目录1.常规计时 (1)1.1 time() (1)1.2 GetTickCount (3)2.使用CPU时间戳进行高精度计时 (5)3.精确获取时间QueryPerformanceCounter (9)1.常规计时1.1 time()C语言中time()函数函数简介函数名:time头文件:time.h函数原型:time_t time(time_t * timer)功能: 获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX 系统的Epoch时间)到当前时刻的秒数。
然后调用localtime将time_t所表示的CUT时间转换为本地时间(我们是+8区,比CUT多8个小时)并转成struct tm类型,该类型的各数据成员分别表示年月日时分秒。
补充说明:time函数的原型也可以理解为long time(long *tloc),即返回一个long型整数。
因为在time.h这个头文件中time_t实际上就是:#ifndef _TIME_T_DEFINEDtypedef long time_t; /* time value */#define _TIME_T_DEFINED /* avoid multiple defines of time_t */#endif即long。
函数应用举例程序例1:time函数获得日历时间。
日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。
这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的。
#include <time.h>#include <stdio.h>#include <dos.h>int main(void){time_t t; t = time(NULL);printf("The number of seconds since January 1, 1970 is %ld",t);return 0;}程序例2://time函数也常用于随机数的生成,用日历时间作为种子。
C++常见程序计时方法
目录1.常规计时 (1)1.1 time() (1)1.2 GetTickCount (3)2.使用CPU时间戳进行高精度计时 (5)3.精确获取时间QueryPerformanceCounter (9)1.常规计时1.1 time()C语言中time()函数函数简介函数名:time头文件:time.h函数原型:time_t time(time_t * timer)功能: 获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX 系统的Epoch时间)到当前时刻的秒数。
然后调用localtime将time_t所表示的CUT时间转换为本地时间(我们是+8区,比CUT多8个小时)并转成struct tm类型,该类型的各数据成员分别表示年月日时分秒。
补充说明:time函数的原型也可以理解为long time(long *tloc),即返回一个long型整数。
因为在time.h这个头文件中time_t实际上就是:#ifndef _TIME_T_DEFINEDtypedef long time_t; /* time value */#define _TIME_T_DEFINED /* avoid multiple defines of time_t */#endif即long。
函数应用举例程序例1:time函数获得日历时间。
日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。
这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的。
#include <time.h>#include <stdio.h>#include <dos.h>int main(void){time_t t; t = time(NULL);printf("The number of seconds since January 1, 1970 is %ld",t);return 0;}程序例2://time函数也常用于随机数的生成,用日历时间作为种子。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
请新建一个空工程,不要新建Win32 Console那个工程!
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>
struct tm //定义时间结构体,包括时分秒和10毫秒
{
int hours,minutes,seconds;
int hscd;
}time,tmp,total; //time用以计时显示,tmp用以存储上一阶段时间,total记总时间
int cnt;
FILE* fout;
//每次调用update函数,相当于时间过了10ms
void update(struct tm *t)
{
(*t).hscd++; //10ms单位时间加1
cnt++;
if ((*t).hscd==100) //计时满1s,进位
{
(*t).hscd=0;
(*t).seconds++;
}
if ((*t).seconds==60) //计时满一分,进位
{
(*t).seconds=0;
(*t).minutes++;
}
if ((*t).minutes==60) //计时满一小时,进位
{
(*t).minutes=0;
(*t).hours++;
}
if((*t).hours==24) (*t).hours=0;
//delay();
Sleep(10); //Sleep是windows提供的函数,作用是暂停程序,单位毫秒,所以此处暂停10ms
}
void display(struct tm *t)
{
//此处输出计时结果,\r为回车不换行,既一直在同一行更新时间
printf("%d:",(*t).hours);
printf("%d:",(*t).minutes);
printf("%d:",(*t).seconds);
printf("%d\r",(*t).hscd);
//printf("Now, press 'e' key to stop the clock...");
}
void time_init() //初始化时间
{
time.hours=time.minutes=time.seconds=time.hscd=0;
}
void get_total() //计算总时间
{
total.hscd = cnt % 100;
cnt /= 100;
total.seconds = cnt % 60;
cnt /= 60;
total.minutes = cnt % 60;
cnt /= 60;
total.hours = cnt;
}
int main()
{
char m;
time_init();
cnt = 0;
fout = fopen("timeout.txt","w");
printf("Now, press Enter key to begin the clock...\n");
while(1)
{
m = getch();
if(m != '\r') //读入一个输入,如果是回车,那么跳出次循环
printf("Input Error!\n");
else
break;
}
printf("While counting, you can press space to start a new time counter!\n");
while(1)
{
if(kbhit()) //此处检查是否有键盘输入
{
m=getch();
if(m == '\r') //如果等于回车,那么计时结束,跳出循环
break;
else if(m == ' ') //如果等于空格,显示此次计时,初始化计时器
{
tmp = time; //记录上一段计时器结果
fprintf(fout,"%d:%d:%d:%d\n",tmp.hours,tmp.minutes,tmp.seconds,tmp.hscd); //写入文件
time_init();
printf("\n");
}
else
{
printf("Input Error!\n");
}
}
update(&time); //更新计时器
display(&time); //显示计时器时间
}
tmp = time; //输出最后一次即使结果,写入文件
fprintf(fout,"%d:%d:%d:%d\n",tmp.hours,tmp.minutes,tmp.seconds,tmp.hscd);
get_total(); //计算总的时间,显示,并写入文件
printf("\ntotal time:%d:%d:%d:%d\n",total.hours,total.minutes,total.seconds,total.hscd); fprintf(fout,"total time:%d:%d:%d:%d\n",total.hours,total.minutes,total.seconds,total.hscd) ;
fclose(fout);
getch();
}。