Thread.Sleep在后台线程中使用100%来自一个系统处理器

时间:2013-08-20 10:31:59

标签: .net vb.net

该项目的目标是.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()

工作正常,消耗的处理器功耗很小。但是,如果我在一个单独的线程中调用它,则会消耗一个核心机器中的所有处理器能力,或多核心机器中的一个核心。 任何人都知道在不超过处理器的情况下做出“延迟”的替代方法吗?

1 个答案:

答案 0 :(得分:1)

您有以下代码:

While Not (...)
    If fs.Exists Then
        ' do stuff
        Thread.Sleep(...)
    End If
End While

因此,如果该文件不存在,则无法入睡。

我不能随便说明为什么你在主线程上会有比在后台线程上有不同的行为。你确定这是发生了什么吗?