0

プロジェクトは .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 つのコア マシンまたはマルチコア マシンの 1 つのコアですべてのプロセッサ パワーが消費されます。プロセッサを追い越さずにその「遅延」を行う別の方法を知っている人はいますか?

4

1 に答える 1

1

あなたはこのコードを持っています:

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

したがって、ファイルが存在しない場合、スリープはありません。

バックグラウンド スレッドとメイン スレッドで異なる動作をする理由を、率直に言うことはできません。それが起こっていることは確かですか?

于 2013-08-20T12:59:59.640 に答える