大家好,欢迎来到IT知识分享网。
来源:http://blog.sina.com.cn/s/blog_6235f42c0100i6n7.html
GetTickCount返回(retrieve)从操作系统启动到现在所经过(elapsed)的毫秒数,它的返回值是DWORD。GetTickCount函数的原型为
DWORD GetTickCount(void);
它在winbase.h头文件中定义为
WINBASEAPI
DWORD
WINAPI
GetTickCount(
winbase.h已被包含进windows.h头文件中,所以要使用GetTickCount只需包含windows.h就可以了。
用一个DWORD类型的值存放一个时间数值,那么经历足够长的时间,这个数值一定会溢出绕回到零(wrap around to zero),我们可以计算这个时间。先算一下一天有多少毫秒mmsEachDay = 24*60*60*1000=86,400,000ms。而一个DWORD最大能表示多达数值呢?DWORD在头文件windef.h中定义如下
typedef unsigned long DWORD;
可以看出DWORD是一个占四个字节即两个字的空间无符号整数,它能表示的最大值为232=4,294,967,695,而4,294,967,695/86,400,000 = 49.71,所以若系统持续运行(run continuously)49.71天,这个数会溢出绕回到零。
可以使用GetTickCount()来大概确定一段代码执行了多少时间,例程如下:
#i nclude <windows.h>
也可以用GetTickCount函数来进行定时,比如若要定时1s,可以使用如下代码:
#i nclude <windows.h>
#i nclude <stdio.h>
void main()
{
dwLast = GetTickCount();
}
GetTickCount的分辨率是1ms。在精度要求不高的情况下也可以使用Sleep()函数定时,它的最小分辨率大概是55ms,Sleep的函数原型为
void Sleep( DWORD dwMilliseconds );
Sleep在winbase.h中的定义如下
WINBASEAPI
VOID
WINAPI
Sleep(
其中VOID是基本数据类型void的别名,可以参见winnt.h中的定义
#ifndef VOID
#define VOID void
typedef char CHAR;
typedef short SHORT;
typedef long LONG;
#endif
如果要使用更高分辨率的话请使用多媒体定时器(multimedia timer)或高分辨率定时器(high-resolution timer)。
GetTickCount在.NET Framework中有一个对应项(counterpart)即System.Environment.TickCount属性。TickCount属性在Environment类中定义如下
public static int TickCount {get;}
System.Environment.TickCount属性的值从系统计时器派生,并以 32 位有符号整数的形式存储。因此,如果系统连续运行 24.9 天,则运行时间将四舍五入到零位。TickCount 属性通过将其值重置为零来处理溢出状况。TickCount 返回的最小值为 0。MSDN上说TickCount 属性的分辨率不能小于 500 毫秒。我在程序中测试可以看出TickCount 的分辨率大概为15~16ms。测试代码如下[C#]
using System;
namespace ConsoleApplication2
{
}
结果的一部分为(当然,多次执行得到的结果不同,但规律相同):
start TickCount:84
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/16189.html