2013-08-30 3 views
2

моя цель состоит в том, чтобыМногопоточность Начиная все темы сразу Динамически

  • Проверить нити, если они что-то (initiallized, живой, на то, что когда-либо)
  • Если они не добавляют столько потоков, как необходимо (до 5) до тех пор, пока все потоки запускаются
  • Если запущены все потоки, перепроверить без потери в count в i-loop
  • Кроме того, это трудно из-за того, как удалить нити из словаря, когда все нити используют один и тот же подраздел

Следующий код показывает все, то AllOtherThreads саб просто

Sub AllOtherThreads(ByVal i As Integer) 
    For z = 0 To 500 
     For q = 0 To 500 
      For w = 0 To 500 
       SomethingInvoked_Invoke(i, z, qt, wt) 
      Next 
     Next 
    Next 
End Sub 

Основной код

For i = 0 To 500 
    Recheck: 
     For izt = 0 To 2 
      If dictThread.Values(izt) Is Nothing Then 
       dictThread.Add("Thread" & izt.ToString, New Thread(New ParameterizedThreadStart(AddressOf AllOtherThreads))) 
       dictThread.Values(izt).Start(i) 
       GoTo nexti 
      ElseIf dictThread.Values(izt).IsAlive = False Then 

       dictThread.Remove(dictThread.Keys(izt)) 

В следующей строке, где ошибка происходит Thread is running or terminated; it cannot restart.

   dictThread.Values(izt).Start(i) 
       GoTo nexti 
      End If 
     Next 
     System.Threading.Thread.Sleep(100) 
     GoTo Recheck 
    nexti: 
    Next 
+0

Какой вопрос вы хотели бы ответил? Вы спрашиваете, как запустить несколько потоков без их жесткого кодирования? – camerondm9

+0

я укажу на них лучше –

+0

Вам нужно всего лишь запустить поток один раз, который вы делаете при его создании. Нити не могут быть перезапущены, поэтому, если вы хотите снова запустить этот код, вам нужно будет создать новый поток. – camerondm9

ответ

2

Тем не может быть перезапущен. Если вам нужно снова запустить этот код, создайте новый поток.
В вашем случае, вы, вероятно, хотите, чтобы удалить старую запись из словаря, а затем воссоздать его:

For i = 0 To 500 
Recheck: 
    For izt = 0 To 2 
     If dictThread.Values(izt) Is Nothing Then 
      dictThread.Add("Thread" & izt.ToString, New Thread(New ParameterizedThreadStart(AddressOf AllOtherThreads))) 
      dictThread.Values(izt).Start(i) 
      GoTo nexti 
     ElseIf dictThread.Values(izt).IsAlive = False Then 
      Dim values As String = dictThread.Keys(izt) 
      'Remove old thread 
      dictThread.Remove(values) 
      'Create new thread 
      dictThread.Add(values, New Thread(New ParameterizedThreadStart(AddressOf AllOtherThreads))) 
      'Start new thread 
      dictThread.Values(izt).Start(i) 
      GoTo nexti 
     End If 
    Next 
    System.Threading.Thread.Sleep(100) 
    GoTo Recheck 
nexti: 
Next 
Смежные вопросы