わかりましたので、私はVB.netで遊んでいて、前のスレッドがその作業を行うのにかかった時間に関係なく、60秒ごとに確実にスレッドを起動する方法をブレインストーミングしてきました。これが私の質問です。次のコードがあるとします。
Dim intTemp As Integer
intTemp = 2
Do While intTemp > 1
Dim objWriter As New System.IO.StreamWriter("C:\Documents\Visual Studio 2010\Projects\Report\Report\Stream.txt", True)
intTemp = intTemp + 1
System.Threading.Thread.Sleep(5000)
objWriter.Write(intTemp & " " & Date.Now & " " & Date.Now.Millisecond & vbCrLf)
objWriter.Close()
Loop
これを stream.txt ファイルに生成します。
3 4/5/2011 9:41:27 AM 807
4 4/5/2011 9:41:32 AM 812
5 4/5/2011 9:41:37 AM 817
6 4/5/2011 9:41:42 AM 822
7 4/5/2011 9:41:47 AM 826
8 4/5/2011 9:41:52 AM 831
9 4/5/2011 9:41:57 AM 836
10 4/5/2011 9:42:02 AM 841
11 4/5/2011 9:42:07 AM 799
この出力に対する私の仮定は、各行間の時間は正確に 5000 ミリ秒に、残りのループの実行にかかる時間を加えたものでなければならないということです。これは、ディスク IO による未知の遅延が発生する可能性があるため、変動する可能性があります。私の問題は、10 行目と 11 行目を見て減算すると、4,958 ミリ秒の差が生じることです。それで私の質問は、一体何が起こっているのですか?プロセスを完了する前にスレッドに 5000 ミリ秒スリープするように指示した場合、5000 ミリ秒未満の差を得るにはどうすればよいでしょうか。私は何が欠けていますか?