C# 的1ms延时函数

本文探讨了C#中实现1ms延时的不同方法,包括调用WinAPI的GetTickCount、timeGetTime、QueryPerformanceCounter,使用.NET的System.Environment.TickCount和System.Diagnostics.Stopwatch类,以及通过CPU时间戳进行计时。每个方法的优缺点、用法及精度进行了详细分析,其中Stopwatch类在硬件支持的情况下提供了较高的精度。
摘要由CSDN通过智能技术生成

1 调用WIN API中的GetTickCount

[DllImport("kernel32")]
static extern uint GetTickCount();

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

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

用法:

1
2
3
uint  s1 = GetTickCount();
Thread.Sleep(2719);
Console.WriteLine(GetTickCount() - s1);  //单位毫秒

2 调用WIN API中的timeGetTime 

[DllImport("winmm")]
static extern uint timeGetTime();

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

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

 
[DllImport( " winmm ")] static extern void timeBeginPeriod( int t); [DllImport( " winmm ")] static extern void timeEndPeriod( int t);

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

用法:

1
2
3
4
5
timeBeginPeriod(1);
uint  start = timeGetTime();
Thread.Sleep(2719);
Console.WriteLine(timeGetTime() - start);  //单位毫
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值