当前位置: 代码迷 >> VB Dotnet >> vb.net 2010 多线程有关问题
  详细解决方案

vb.net 2010 多线程有关问题

热度:520   发布时间:2016-04-25 01:59:17.0
vb.net 2010 多线程问题
     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,参照问题一,计算号码的执行时间就长,并发完所有线程后,还没等到这些线程执行结束,你就去显示计算结果,所以没有结果。

基本上,我是猜的。
  相关解决方案