专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > VB Dotnet

延迟有关问题精确到ms

发布时间:2011-06-23 16:01:20 文章来源:www.iduyao.cn 采编人员:星星草
延迟问题精确到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
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: