该项目的目标是.net 2.0。我正在使用以下方法在新线程中实例化方法:
myThread = New Threading.Thread(AddressOf myClass.MyMethod)
myThread.Start()
子是这样的:
Sub myMethod()
Dim fs As New IO.FileInfo(sFile)
While Not DateDiff(DateInterval.Second,
dtCurrentTime, Now()) > iTimeOutInSeconds
fs.Refresh()
If fs.Exists Then
fs.Refresh()
If fs.Length > 0 AndAlso fs.Length = iGrowing Then
bFileExists = True
Exit While
End If
iGrowing = fs.Length
System.Threading.Thread.Sleep(1000)
End If
End While
End Sub
我等到文件停止增长。问题是如果我从主线程调用它,如:
Call myClass.MyMethod()
工作正常,消耗的处理器功耗很小。但是,如果我在一个单独的线程中调用它,则会消耗一个核心机器中的所有处理器能力,或多核心机器中的一个核心。 任何人都知道在不超过处理器的情况下做出“延迟”的替代方法吗?
答案 0 :(得分:1)
您有以下代码:
While Not (...)
If fs.Exists Then
' do stuff
Thread.Sleep(...)
End If
End While
因此,如果该文件不存在,则无法入睡。
我不能随便说明为什么你在主线程上会有比在后台线程上有不同的行为。你确定这是发生了什么吗?