当前位置:首页 > 网站建设 > 正文内容

按键精灵反编译工具(按键精灵反编译源码)

网站建设1年前 (2023-10-13)386

根据综合网上的一些文章,精确计时主要有以下几种方式

1 调用WIN API中的GetTickCount

从操作系统启动到现在所经过的毫秒数,精度为1毫秒,经简单测试发现其实误差在大约在15ms左右

按键精灵反编译工具(按键精灵反编译源码)

缺点:返回值是uint,最大值是2的32次方,因此如果服务器连续开机大约49天以后,该方法取得的返回值会归零

用法:

2 调用WIN API中的timeGetTime 推荐

常用于多媒体定时器中,与GetTickCount类似,也是返回操作系统启动到现在所经过的毫秒数,精度为1毫秒。

一般默认的精度不止1毫秒(不同操作系统有所不同),需要调用timeBeginPeriod与timeEndPeriod来设置精度

缺点:与GetTickCount一样,受返回值的最大位数限制。

用法:

3 调用.net自带的方法System.Environment.TickCount

获取系统启动后经过的毫秒数。经反编译猜测它可能也是调用的GetTickCount,但是它的返回值是int,而GetTickCount与timeGetTime方法的原型中返回值是DWORD,对应C#中的uint,难道.NET对System.Environment.TickCount另外还做了什么处理么?

缺点:与GetTickCount一样,受返回值的最大位数限制。

用法:

注:经过测试,发现GetTickCount、System.Environment.TickCount也可以用timeBeginPeriod与timeEndPeriod来设置精度,最高可将精度提高到1毫秒。不知是什么原因?

4 调用WIN API中的QueryPerformanceCounter

用于得到高精度计时器(如果存在这样的计时器)的值。微软对这个API解释就是每秒钟某个计数器增长的数值。

如果安装的硬件不支持高精度计时器,函数将返回false需要配合另一个API函数QueryPerformanceFrequency。

QueryPerformanceFrequency返回硬件支持的高精度计数器的频率,如果安装的硬件不支持高精度计时器,函数将返回false。

展开全文

用法:

longa = 0; QueryPerformanceFrequency( refa); longb = 0, c = 0; QueryPerformanceCounter( refb); Thread.Sleep( 2719); QueryPerformanceCounter( refc); Console.WriteLine((c - b) / ( decimal)a); //单位秒

精度为百万分之一秒。而且由于是long型,所以不存在上面几个API位数不够的问题。

缺点:在一篇文章看到,该API在节能模式的时候结果偏慢,超频模式的时候又偏快,而且用电池和接电源的时候效果还不一样(笔记本)

原文地址:http://delphi.xcjc.net/viewthread.php?tid=1570

未经过超频等测试,如果是真的,那该API出来的结果就可能不准。

5 使用.net的System.Diagnostics.Stopwatch类 推荐

Stopwatch 在基础计时器机制中对计时器的刻度进行计数,从而测量运行时间。如果安装的硬件和操作系统支持高分辨率性能的计数器,则 Stopwatch 类将使用该计数器来测量运行时间;否则,Stopwatch 类将使用系统计数器来测量运行时间。使用 Frequency 和 IsHighResolution 两个静态字段可以确定实现 Stopwatch 计时的精度和分辨率。

实际上它里面就是将QueryPerformanceCounter、QueryPerformanceFrequency两个WIN API封装了一下,如果硬件支持高精度,就调用QueryPerformanceCounter,如果不支持就用DateTime.Ticks来计算。

用法:

6 使用CPU时间戳进行更高精度计时

该方法的原理我不是很明白,硬件知识太匮乏了。精度是ns

在C#中要用该方法必须先建立一个托管C++项目(因为要内嵌汇编),编译成DLL供c#调用,有点麻烦。

C++代码:

// MLTimerDot.h# pragmaonce usingnamespaceSystem; namespaceMLTimerDot{ //得到计算机启动到现在的时钟周期unsigned __ int64 GetCycleCount( void) {_asm _emit 0x0F_asm _emit 0x31} //声明 .NET 类public__gc classMLTimer{ public: MLTimer( void) {} //计算时钟周期UInt64 GetCount( void) { returnGetCycleCount; }};}

C#调用:

longa = 0; QueryPerformanceFrequency( refa); MLTimerDot.MLTimer timer = newMLTimerDot.MLTimer; ulongss= timer.GetCount; Thread.Sleep( 2719); Console.WriteLine((timer.GetCount - ss) / ( decimal)a);

缺点:和QueryPerformanceCounter一样,结果不太稳定。

我的结论:常规应用下timeGetTime完全够用了,将精度调到1毫秒,大部分境况都够用。System.Diagnostics.Stopwatch由于调用方便,也推荐使用

来源公众号:dotNET编程大全

版权声明:本文来源于网友收集或网友供稿,仅供学习交流之用,如果有侵权,请转告小编或者留言,本公众号立即删除。

支持小薇

关注公众号 ↑ ↑ ↑: DotNet开发跳槽 ❀

点分享

点收藏

点点赞

点在看

扫描二维码推送至手机访问。

版权声明:本文由飞速云SEO网络优化推广发布,如需转载请注明出处。

本文链接:http://zspsrg.cn/post/60313.html

分享给朋友:

“按键精灵反编译工具(按键精灵反编译源码)” 的相关文章

电子商务网站seo(电子商务网站软件建设的核心是)

电子商务网站seo(电子商务网站软件建设的核心是)

今天给各位分享电子商务网站seo的知识,其中也会对电子商务网站软件建设的核心是进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、电子商务SEO如何优化独立电商网站 2、电商网站的SEO优化究竟要怎样做 3、大型电子商务网站的SEO优化要怎么做 4、...

湖南网站建设的简单介绍

湖南网站建设的简单介绍

本篇文章给大家谈谈湖南网站建设,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、湖南湘潭哪里有网站设计和建设的公司? 2、湖南长沙,最完善的网站设计运营公司 3、湖南做网站建设一般多少钱? 4、湖南网站建设需要注意什么? 湖南湘潭哪里有网站设计和建设的公...

国外网站谷歌seo推广(网站海外推广谷歌seo方案)

国外网站谷歌seo推广(网站海外推广谷歌seo方案)

今天给各位分享国外网站谷歌seo推广的知识,其中也会对网站海外推广谷歌seo方案进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、google seo应该怎么做 2、如何做谷歌推广? 3、为什么外贸企业要选择谷歌海外推广 4、网络外贸推广是做SEO...

三年级上册英语ppt课件免费下载译林版(译林版三年级上册英语PPT)

三年级上册英语ppt课件免费下载译林版(译林版三年级上册英语PPT)

今天给各位分享三年级上册英语ppt课件免费下载译林版的知识,其中也会对译林版三年级上册英语PPT进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、谁有译林版小学三年级上册英语 第三单元第一课时 My friends 的说课稿 2、哪里有小学三年级上册(三年...

平面设计素材免费下载网站(平面设计师素材网站)

平面设计素材免费下载网站(平面设计师素材网站)

本篇文章给大家谈谈平面设计素材免费下载网站,以及平面设计师素材网站对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、平面设计素材网站有哪些 2、跟花瓣网一个性质的平面设计网站有哪些? 3、请大家推荐几个可以方便下载平面设计图片素材的网站。 4、平面设计图片素材网...

商城送电器骗局(商城送电器骗局套路)

商城送电器骗局(商城送电器骗局套路)

本篇文章给大家谈谈商城送电器骗局,以及商城送电器骗局套路对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、京东商城是骗人没商量.卖假货,送货慢.把我给气的!!!!! 2、街上 电器抽奖骗人怎么回事?真正原因是什么? 3、国美电器 骗子 4、安电信宽带送家电活动是...