0

我想为 VB 中的网络应用程序的packetSize/Bandwidth持续时间睡觉。

该值在“10^-3 - 10^-6”秒之间变化。

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

编辑:

  1. 在上述范围的短暂小睡后,我必须继续发送数据包。因此,我无法指定,例如,在客户端休眠 0.001 毫秒。
  2. 我的要求是 CS 应用程序的客户端,它读取文件并以定期或不定期的睡眠间隔向服务器发送小数据包。稍后,服务器捕获数据包并以自己的速率对其进行处理。

如何做到这一点?

4

4 回答 4

1

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

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


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

于 2011-09-20T14:10:39.583 回答
0

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

于 2011-09-20T16:54:00.717 回答
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

这符合你的目的吗?

于 2011-09-20T23:17:38.220 回答
0

我只是在研究 VB 中的秒表概念……下面的代码块可以工作吗?

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
于 2011-09-21T05:38:44.470 回答