プロキシチェッカーを作成しようとしています。 これは私のマルチスレッド化の最初の試みであり、あまりうまくいかず、スレッドは次のスレッドを初期化する前に完了するのを待っているようです。問題が発生しているマルチスレッドプロキシチェッカー
Imports System.Net
Imports System.IO
Imports System.Threading
Public Class Form1
Public sFileName As String
Public srFileReader As System.IO.StreamReader
Public sInputLine As String
Public Class WebCall
Public proxy As String
Public htmlout As String
Public Sub New(ByVal proxy As String)
Me.proxy = proxy
End Sub
Public Event ThreadComplete(ByVal htmlout As String)
Public Sub send()
Dim myWebRequest As HttpWebRequest = CType(WebRequest.Create("http://www.myserver.com/ip.php"), HttpWebRequest)
myWebRequest.Proxy = New WebProxy(proxy, False)
Try
Dim myWebResponse As HttpWebResponse = CType(myWebRequest.GetResponse(), HttpWebResponse)
Dim loResponseStream As StreamReader = New StreamReader(myWebResponse.GetResponseStream())
htmlout = loResponseStream.ReadToEnd()
Debug.WriteLine("Finished - " & htmlout)
RaiseEvent ThreadComplete(htmlout)
Catch ex As WebException
If (ex.Status = WebExceptionStatus.ConnectFailure) Then
End If
Debug.WriteLine("Failed - " & proxy)
End Try
End Sub
End Class
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim proxy As String
Dim webArray As New ArrayList()
Dim n As Integer
For n = 0 To 2
proxy = srFileReader.ReadLine()
webArray.Add(New WebCall(proxy))
Next
Dim w As WebCall
For Each w In webArray
Threading.ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf w.send), w)
Next w
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
srFileReader = System.IO.File.OpenText("proxies.txt")
End Sub
End Class
"スレッドは次のスレッドを初期化する前に完了するのを待っているようです。スレッドプール(つまり、このプールには10個のスレッドがあるとします)があり、すべてのスレッドが同時に飛行するわけではありません(つまり、1000個のタスクをキューに入れます)。プールには10個のスレッドしか存在しないため、10個だけが実行され、他の要求はキューに入れられ、スレッドが空き状態になるのを待ちます)msdn:http://msdn.microsoftを参照してください。 com/en-us/library/y5htx827.aspx – Juliet
私は、スレッドが同時に「横並びに」実行できることを前提としていたので、スレッドの数をsetminthreads/maxthreadsで設定する必要がありますか?返信 – Paul