0
私は、ディレクトリ内のファイルを同時に処理できるvbでマルチスレッドプログラムを作成しなければなりませんでした。 問題は数時間は正常に動作することです。 3つのスレッドisAliveメソッドがすべて "true"の値で返されるため、突然 "Thread.Sleep(500)"に突き当たりますが、 "StartSub"はすべてのスレッドで終了します。コードが間違っているのか、それとも問題になるのでしょうか?コード終了後にスレッドがまだ生きていることがあります
Basicalyプログラムは、次のようなものです:
private sub main()
importThread = New Thread(AddressOf StartSub)
importThread2 = New Thread(AddressOf StartSub)
for each file in directory
While True
If importThread.IsAlive And importThread2.IsAlive Then
Thread.Sleep(500)
Else : Exit While
End If
End While
If importThread.IsAlive Then
importThread2 = New Thread(AddressOf StartSub)
importThread2.IsBackground = True
importThread2.Start()
Else
importThread = New Thread(AddressOf StartSub)
importThread.IsBackground = True
importThread.Start()
End If
next
End sub
Private Sub StartSub(ByVal tp As Object)
'Read fileinfo and process it for something
end Sub
各ディレクトリに2つの新しいスレッドを開始します。生のスレッドを使用するのではなく、TasksとTPLを使用することをお勧めします。これにより、スレッドやオブジェクトの代わりに適切なメソッドを使用し、タスクを 'await'や' ContinueWith'などと組み合わせることができます。並列に各フォルダを処理するために 'Parallel.ForEach'を使うこともできます。 –
ありがとうございます私のコード/思考の問題。メソッドの処理が完了しても、両方のスレッドはまだ生きていますが、なぜ何時間も働いていますか?問題を理解することでマルチスレッド化が進んでいます。 – user3219009
まず、「StartSub」にコードを投稿しないと誰が知ることができますか?しかし、フォルダごとに2つのスレッドを起動し、* last *繰り返しで作成されたものだけをチェックするような明白な問題があります。ゴーストスレッドを生成しなかったとしても、コードは常に「StartSub」メソッドの1つが終了するのを待ちます。そうでない場合、ループは終了しません。 –