如何获得毫秒和纳秒级种子c++
来源:互联网 发布:电工模拟考试软件下载 编辑:程序博客网 时间:2024/04/29 11:53
对关注性能的程序开发人员而言,一个好的计时部件既是益友,也是良师。计时器既可以作为程序组件帮助程序员精确的控制程序进程,又是一件有力的调试武器,在有经验的程序员手里可以尽快的确定程序的性能瓶颈,或者对不同的算法作出有说服力的性能比较。
在Windows平台下,常用的计时器有两种,一种是timeGetTime多媒体计时器,它可以提供毫秒级的计时。但这个精度对很多应用场合而言还是太粗糙了。另一种是QueryPerformanceCount计数器,随系统的不同可以提供微秒级的计数。对于实时图形处理、多媒体数据流处理、或者实时系统构造的程序员,善用QueryPerformanceCount/QueryPerformanceFrequency是一项基本功。
(引用)- -
我们可以在C++中这样写:
__declspec (naked) unsigned __int64 GetCpuCycle( void )
{
_asm
{
rdtsc
ret
}
}
RDTSC的返回值存放在EDX EAX中, EDX为高32位,EAX为低32位。。。
这里的__declspec (naked)就不用说了吧。。前面已经提到过。 关键是这里的 RDTSC 指令( Read Time Stamp Counter ), 获得CPU的高精度时间戳。也可以这样写:
__declspec (naked) unsigned __int64 GetCpuCycle( void )
{
_asm
{
__asm _emit 0x0F
__asm _emit 0x31
ret
}
}
这样相当于直接压入该指令的机器码。原贴说rdtsc不能在C++内联汇编编译器里面被识别。反正我是可以的,不知道是不是现在编译器能识别这个的原因,这里不讨论这个 - -
这样以来我们就可以在随处获得当前的CPU自上电以来的时间周期数了:
unsigned __int64 iCpuCycle = GetCpuCycle();
根据这个数字我们可以计算出上电以来所经历的时间( 秒s ):
second = iCpuCycle / CPU主频率( HZ );
1GHZ = 1,000 MHZ = 1,000,000 KHZ = 1,000,000,000 HZ;
完全可以放心一个unsigned __int64 不会溢出 - - 你可以计算一下你的CPU能保存多少年的时间。。
根据这一方法有几个好处: 一是精度高,二是函数调用开销最小,三是平台限制小,四是具有和CPU主频相对应的直接关系。。。 但是由于精度高,得到的数字浮动比较大。。
有了这样一个计时器,一些实时的处理就更精准了。。。。 - -
- 如何获得毫秒和纳秒级种子c++
- C语言如何获得精确到毫秒的时间
- C语言如何获得精确到毫秒的时间
- C语言如何获得精确到毫秒的时间
- C语言如何获得精确到毫秒的时间
- C语言如何获得精确到 毫秒 的时间
- C语言如何获得精确到毫秒的时间
- MySQL:存储过程详解和如何获得 MySQL 毫秒、微秒
- 随机数---秒及毫秒级随机数种子(C++)
- MySQL:如何获得 MySQL 毫秒、微秒
- 如何获得系统当前时间 毫秒
- linux下获得微妙和毫秒
- 客户端js获得毫秒
- SHELL获得毫秒数
- PHP获得毫秒数
- 如何获得C币
- 如何获得C币
- 在种子轮中,如何区分风险投资、种子投资和天使投资?
- 安卓中发送广播的方法
- zlib uncompress解压数据inflate_fast函数出错的解决办法
- Problem 1608 Huge Mission
- iTop4412---linux 3.0.15内核编译错误
- Webpack入门之一:从一个简单例子入门
- 如何获得毫秒和纳秒级种子c++
- 部署Node.js项目
- 手机端切图你需要知道这些
- java web开中WebRoot下的jsp和WebRoot文件夹下的jsp(html)引用css样式
- Java导入导出CSV文件
- Java中的泛型方法
- web查漏补缺
- Websocket原理
- IOS开发之纯代码界面--基本控件使用篇