首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

延迟有关问题精确到ms

2012-02-03 
延迟问题精确到msVB.NET codePrivate Declare Function timeGetTime Lib winmm.dll () As LongPublic Su

延迟问题精确到ms

VB.NET code
     Private Declare Function timeGetTime Lib "winmm.dll" () As Long    Public Sub WAITmS(ByVal WaitTime As Integer)        Dim STARTmS As Double           Dim NOWmS As Double                     STARTmS = timeGetTime        If STARTmS < 0 Then            STARTmS = STARTmS + 4294967296.0#        End If        Do            Application.DoEvents()            NOWmS = timeGetTime            If NOWmS < 0 Then                NOWmS = NOWmS + 4294967296.0#            End If            If STARTmS > NOWmS Then                NOWmS = NOWmS + 4294967296.0#            End If        Loop While STARTmS + WaitTime > NOWmS    ' GetTickCount    End Sub



上面是网络的代码,调用这个函数的时候给参数WAITmS(1)的时候,延迟的是毫秒吗?

还是秒,需要高手给解释下,想明白这个延迟的具体完成动作

只回答是和否是拿不到分的

[解决办法]
虽然timeGetTime返回值的单位是1ms,但实际上它的精度只有10ms左右。
如果想提高精度,可以使用QueryPerformanceCounterQueryPerformanceFrequency。这两个函数不是在每个系统中都支持。对于支持它们的系统中,可以获得低于1ms的精度。Windows 内部有一个精度非常高的定时器, 精度在微秒级, 但不同的系统这个定时器的频率不同, 这个频率与硬件和操作系统都可能有关。利用 API 函数 QueryPerformanceFrequency 可以得到这个定时器的频率。利用 API 函数 QueryPerformanceCounter 可以得到定时器的当前值。根据要延时的时间和定时器的频率, 可以算出要延时的时间定时器经过的周期数。在循环里用 QueryPerformanceCounter 不停的读出定时器值, 一直到经过了指定周期数再结束循环, 就达到了高精度延时的目的。例如:
VB.NET code
    Private Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As Currency) As Long    Private Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As Currency) As Long        ' DelayNum为延时的毫秒数    Private Sub DelayTime(ByVal DelayNum As Long)     Dim Ctr1, Ctr2, Freq As Currency     Dim Count As Double         If QueryPerformanceFrequency(Freq) Then     QueryPerformanceCounter Ctr1     Do     QueryPerformanceCounter Ctr2     Loop While (Ctr2 - Ctr1) / Freq * 1000 < DelayNum     Else     MsgBox "不支持高精度计数器!"     End If    End Sub
[解决办法]
纠正一点...Windows系统的系统时钟精度是15毫秒左右...
[解决办法]
是的...是15毫秒左右...

更确切地说,对于Intel芯片的精度为15-16ms,对于MIPS芯片的精度为10ms左右...而对Win98或其它系统来说,这个值可能是10-58ms...
[解决办法]
Windows系统的系统时钟精度是15毫秒左右
[解决办法]
C# 的声明方法...我这儿没有VB环境,你自己改改试试看吧...
C# code
[DllImport("Kernel32.dll")]private static extern bool QueryPerformanceCounter(out long lpPerformanceCount);[DllImport("Kernel32.dll")]private static extern bool QueryPerformanceFrequency(out long lpFrequency);
[解决办法]
修改数据,需要传递地址...
[解决办法]
MARK
[解决办法]
类似:http://topic.csdn.net/u/20090306/11/8513527f-1a84-45d4-a550-59072bc0c9d5.html

热点排行