Dim 星数 as int32=3
Public Class 计算结果
Public 开始 As Int32
Public 结束 As Int32
Public 号码 As Int32()
End Class
Private Sub 计算号码(ByVal AAA As 计算结果)
Dim Dy As New List(Of Int32)
For i As Int32 = AAA.开始 To AAA.结束
If 胆组组号条件组判断(i, 全局胆组组号条件) = True And 胆码组号判断组判断(i, 全局胆码组号条件) Then
Dy.Add(i)
End If
Next
AAA.号码 = Dy.ToArray
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim i As Int32
Dim Ans As 计算结果()
Dim 线程数 As Int32 = 8
Dim 节点增加数 As Int32
节点增加数 = 10 ^ 星数 \ 线程数
ReDim Ans(线程数 - 1)
For i = 0 To 线程数 - 1
Debug.Print(i)
Ans(i) = New 计算结果
Ans(i).开始 = i * 节点增加数
Ans(i).结束 = 节点增加数 * (i + 1) - 1
Dim P As New Threading.ParameterizedThreadStart(AddressOf 计算号码)
Dim T As New Threading.Thread(P)
T.Start(Ans(i))
Application.DoEvents()
Next
Dim St As String = Nothing
For i = 0 To Ans.Length - 1
St &= 数组转为文本(Ans(i).号码, 星数) & Space(1)
Next
Me.RichTextBox1.Text = St
End Sub
Function 胆组组号条件组判断 和 胆码组号判断组判断 涉及的函数太多,代码就不贴了
问题一,全局变量“星数”为3或者4时,有那么几个线程的结果不显示
问题二,当全局变量“星数”为5时,如果线程数够大时有部分结果显示,线程数比较小时根本没结果显示
请指出错误的原来并指点正确的方法,谢谢大家
------解决思路----------------------
星数影响你的节点增加数,节点增加数影响你的计算结果的开始和结束,计算结果的开始和结束影响你的计算号码的执行时间。
问题一,“有那么几个线程的结果不显示”,你怎么保证当你显示时你的这些线程都执行完了呢?
问题二,线程数够大,并发线程数就够多,在你并发完所有线程后,可能已经执行完成的线程也就越多,所以有部分结果显示。
线程数比较小,并发线程数就少,同时你的星数为5,参照问题一,计算号码的执行时间就长,并发完所有线程后,还没等到这些线程执行结束,你就去显示计算结果,所以没有结果。
基本上,我是猜的。