c++ 准确计时_C++ 精确计时

1.毫秒精确 #include   #include   #include   int   main() {   clock_t   t_begin,t_end;     //代码1开始计时   t_begin=clock(); // //你的程序段 //   t_end=clock();   printf( "代码所用的时间:%f毫秒/n ",(double)(t_end-t_begin)); getch(); return   0; } 2.微秒精确 下列代码实现1微秒的精确定时:               LARGE_INTEGER   litmp;                 LONGLONG   QPart1,QPart2;               double   dfMinus,   dfFreq,   dfTim;                 QueryPerformanceFrequency(&litmp);               dfFreq   =   (double)litmp.QuadPart;//   获得计数器的时钟频率               QueryPerformanceCounter(&litmp);               QPart1   =   litmp.QuadPart;//   获得初始值               do               {                     QueryPerformanceCounter(&litmp);                     QPart2   =   litmp.QuadPart;//获得中止值                     dfMinus   =   (double)(QPart2-QPart1);                     dfTim   =   dfMinus   /   dfFreq;//   获得对应的时间值,单位为秒               }while(dfTim <0.000001); 其定时误差一般不超过0.5微秒,精度与CPU等机器配置有关。 3.更精确         在Pentium的指令系统中有一条指令可以获得CPU内部64位计数器的值,我们可以通过代码两次获取该计数器的值而获得程序或代码运行的时钟周期数,进而通过你的cpu的频率算出一个时钟周期的时间,从而算出程序运行的确切时间。         我们通过指令TDSIC来获得cpu内部计数器的值,指令TDSIC返回值放在EDX:EAX中,其中EDX中存放64位寄存器中高32位的值,EAX存放第32位的值.         下面看看实现的代码:   //用汇编实现获取一段代码运行的时间   #include using   namespace   std; void   GetClockNumber   (long   high,   long   low); void   GetRunTime();   int   main() {                   long   HighStart,LowStart,HighEnd,LowEnd;   long   numhigh,numlow;   //获取代码运行开始时cpu内部计数器的值   __asm                               {     RDTSC       mov   HighStart,   edx     mov   LowStart,   eax   }   for(int   i=   0;   i <100000;   i++   )   {                           for(int   i=   0;   i <100000;   i++   )             {                           }   }       //获取代码结束时cpu内部计数器的值,并减去初值                 __asm   {     RDTSC     mov   HighEnd,   edx     Mov   LowEnd,     eax     ;获取两次计数器值得差     sub   eax,     LowStart     cmp         eax,     0               ;   如果低32的差为负则求返,因为第二次取得永远比第一次的大     jg           L1     neg           eax       jmp           L2                         L1:   mov   numlow,     eax                         L2:   sbb   edx,     HighStart     mov   numhigh,   edx       }                 //把两个计数器值之差放在一个64位的整形变量中                 //先把高32位左移32位放在64的整形变量中,然后再加上低32位   __int64     timer   =(numhigh < <32)   +   numlow;                   //输出代码段运行的时钟周期数                   //以频率1.1Gcpu为例,如果换计算机把其中的1.1改乘其它即可,因为相信大家的cpu都应该在1G以上     ^_^     cout < <   (double)   (timer   /1.1/1000000000)   < <   endl;   return   0; }             这样通过一条简单的汇编指令就可以获得程序或一段代码的大概时间,不过并不能得到运行的确切时间,因为即使去掉中间的循环,程序也会有个运行时间, 因为在第一次取得计数器的值后,有两条汇编指令mov   HighStart,   edx               mov   LowStart,   eax这两条指令当然也有运行时间   ,当然你可以减去这两条指令的运行时间(在1.1G的机子上是3e-8s),这样会更精确一点。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值