好的,所以我一直在玩 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 毫秒的差异。我错过了什么?