VB .net无法在非常短的时间内睡眠()

时间:2011-09-20 13:36:56

标签: vb.net thread-sleep timedelay

我希望睡眠以获取VB中网络应用程序的 packetSize / Bandwidth 持续时间。

此值从“10 ^ -3 - 10 ^ -6”秒变化。

当我使用Sleep()函数时,如果它小于1(<1秒~~ 0秒??),我认为它不会在持续时间内休眠。

编辑:

  1. 我必须在上述范围的短暂睡眠后继续发送数据包。因此,我无法指定,例如,在客户端休眠0.001毫秒。
  2. 我的要求是针对CS应用程序的客户端,该应用程序读取文件并持续向服务器定期或不定期地发送小数据包。稍后,服务器会捕获数据包并按照自己的速率处理它。
  3. 如何实现这一目标?

4 个答案:

答案 0 :(得分:1)

睡眠的分辨率为毫秒 - 即10 ^ -3。 (参见http://msdn.microsoft.com/en-us/library/d00bd51t.aspxhttp://msdn.microsoft.com/en-us/library/274eh01d.aspx)。一秒钟是1000毫秒;那是睡眠(1000)。

您不能将Sleep()用于小于10 ^ -3秒的值。我已成功使用Sleep(),其值为62,125和250毫秒。


您可以尝试使用System.Diagnostics.Stopwatch;也许可以建立一个等待或暂停功能。 (见http://msdn.microsoft.com/en-us/library/ebf7z0sw.aspx

答案 1 :(得分:0)

没有任何系统等待功能以微秒分辨率超时。您需要一个繁忙的循环和一个高分辨率计时器。当然,系统可能会抢占您的主题,因此您可以忘记Windows上的实时保证。

答案 2 :(得分:0)

我怀疑你是在思考这个问题。网络通信具有缓冲区,因为它们无法实际期望应用程序准备就绪并等待传输的每个位。我建议尽可能多地阅读数据,短暂睡眠并重复。

Do Until all data is read
    While buffer contains data
        read data
    Wend
    ' Let other threads have a go, but come back as soon as possible.
    Thread.Sleep(0)
Loop

这是否适合您的目的?

答案 3 :(得分:0)

我正在研究VB中的StopWatch概念......下面的代码块会起作用吗?

Private Sub MyWaiter(ByVal delay As Double)

    Dim sw As Stopwatch = New Stopwatch()

    sw.Start()

    Do While sw.ElapsedTicks < delay * TimeSpan.TicksPerSecond
        ' Allows UI to remain responsive
        Application.DoEvents()
    Loop

    sw.Stop()

End Sub