0

VB のネットワーク アプリケーションで、 packetSize/Bandwidthの期間だけスリープしたいと考えています。

この値は、「10^-3 - 10^-6」秒の範囲で変化します。

Sleep() 関数を使用すると、1 秒未満 (< 1 秒 ~~ 0 秒??) の場合、その期間はスリープしていないと思います。

編集:

  1. 範囲を超えた短い昼寝の後、パケットを送信し続けなければなりません。そのため、たとえば、クライアント側で 0.001 ミリ秒スリープするように指定できませんでした。
  2. 私の要件は、ファイルを読み取り、定期的または不規則なスリープ間隔で小さなパケットをサーバーに送信し続ける CS アプリのクライアント側です。その後、サーバーはパケットをキャプチャし、独自の速度で処理します。

これを達成する方法は?

4

4 に答える 4

1

Sleep の分解能はミリ秒単位で、つまり 10^-3 です。( http://msdn.microsoft.com/en-us/library/d00bd51t.aspxおよびhttp://msdn.microsoft.com/en-us/library/274eh01d.aspxを参照)。1 秒は 1000 ミリ秒です。それがSleep(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 に答える