Хорошо, поэтому я играл с 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 миллисекунд плюс время, необходимое для выполнения остальной части цикла, которое может варьироваться, учитывая, что может быть неизвестная задержка из-за дискового ввода-вывода , Моя проблема в том, что просмотр строк 10 и 11 и вычитание дает мне разницу в 4958 миллисекунд. Итак, мой вопрос, что, черт возьми, там происходит? Как можно получить разницу менее 5000 миллисекунд, когда я сказал потоку спать в течение 5000 миллисекунд до завершения процесса. Чего мне не хватает?