2013-01-09 27 views
-1

喜请检查该代码相同的变量传递给多个线程

For icnt As Integer = 1 To 100 
     Me.SetText(icnt) 
     Dim gd As String = "" 
     Dim gl As String = "" 
     Dim cr As String = "" 
     Dim lr As String = "" 
     Dim tbs As String = "" 
     Dim srt As String = "" 
     Dim fp As String = "" 
     Dim ky As String = "" 
     Dim prx As String = "" 

     Dim rnd As New Random 
     Dim scrpurl As String = "" 
     Dim bldstr As New List(Of String) 

     scrpurl = GlobalVariables.domain(rnd.Next(0, GlobalVariables.googledomain.Count - 1)) & "https://stackoverflow.com/search?q=" 
     scrpurl = scrpurl & GlobalVariables.prints(rnd.Next(0, GlobalVariables.footprints.Count - 1)) 
     scrpurl = scrpurl & GlobalVariables.words(rnd.Next(0, GlobalVariables.keywords.Count - 1)) 
     scrpurl = scrpurl & GlobalVariables.gl(rnd.Next(0, GlobalVariables.googlegl.Count - 1)) 
     scrpurl = scrpurl & GlobalVariables.cr(rnd.Next(0, GlobalVariables.googlecr.Count - 1)) 
     scrpurl = scrpurl & GlobalVariables.lr(rnd.Next(0, GlobalVariables.googlelr.Count - 1)) 
     scrpurl = scrpurl & GlobalVariables.tbs(rnd.Next(0, GlobalVariables.googletbs.Count - 1)) 
     scrpurl = scrpurl & GlobalVariables.start(rnd.Next(0, GlobalVariables.googlestart.Count - 1)) 

     MsgBox(scrpurl) 

     bldstr.Clear() 
     bldstr.Add(scrpurl) 

     Dim dr3 As DataRow() = dtse.Select("seurl ='" & scrpurl & "'", "se") 
     If (dr3.Count = 0) Then 
      Dim w1 As WaitCallback = New WaitCallback(AddressOf setdata) 
      ThreadPool.QueueUserWorkItem(w1, bldstr) 
     End If 

    Next 

谁能告诉我,当我告诉这些URL我看到scrpurl和使用setData不同的值增加了正确和100个独特的行。

当我不显示它setdata添加100行相同的scrpurl。我知道应该做一些事情,以便每个setdata获得不同的scrpurl,但我在这里错过了一些东西。任何人都可以请帮我吗?

问候,

回答

1

你正在创建每个你通过循环迭代一次新Random对象。如果您将Dim rnd As New Random系列移至for循环之前,它将正常工作。

原因是因为计算机生成的随机数并不是真的随机数 - 他们只是出现是随机的。它的工作方式是首先确定一个“种子”值。然后,它使用一个数学公式,从而输入种子值加上一个附加的序列值,就可以得到下一个(看似)随机数。因此,每当种子值相同时,其生成的随机数序列将始终相同。 Random类生成种子值的方式是将其从创建对象时的当前时间移出。因此,如果同时创建一堆Random对象,它们将生成完全相同的随机数序列。

因此,在应用程序启动时创建一个Random对象,然后在任何地方重复使用同一个对象,而不是在每次需要时都创建一个新对象时,通常是最佳做法。

+0

lol好的谢谢你的回答。有效。我认为随机是一种实际的随机方法,是的,我从现在开始只专注于一个随机方法。 – xhammer

相关问题