试图将4个大型潜艇变成4个线程以节省时间......线程没有启动

时间:2014-02-28 17:11:07

标签: vb.net multithreading visual-studio-2012

这是情况。运行VS2012,代码在VB.NET中,框架是4.0。我有一个构建报告的程序。它为大约50,000个不同的客户对sql数据库进行了各种查询,因此线性运行程序,服务器上大约需要17个小时,如果我尝试通过调试执行此操作大约需要36个小时。我试图把它减少到我们可以运行一夜的东西,并且想要使用线程。

在main_load中调用了4个主要子程序,同时生成4个单独的文件。虽然它们确实引用了相同的数据库,但它只是select语句,所以我应该可以同时运行它们,对吧?所以我把4个子程序调用改为了......

    Imports System.Data.OleDb
    Imports System.Data.SqlClient
    Imports System.IO
    Imports CDDReports.RiskRatings
    Imports System.Threading

    Public Class Main

    Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim trd1, trd2, trd3, trd4 As Thread
    trd1 = New Thread(AddressOf RunRiskRatedBusinessReport)
    trd2 = New Thread(AddressOf RunRiskRatedConsumerReport)
    trd3 = New Thread(AddressOf RunRatingVarianceBusinessReport)
    trd4 = New Thread(AddressOf RunRatingVarianceConsumerReport)

    trd1.Start()
    trd2.Start()
    trd3.Start()
    trd4.Start()
    End Sub
    //subroutines defined
    end class

但是当我运行该程序时,现在没有任何反应。偶尔会创建一个或两个文件(每个子例程的前几行创建文件)所以看起来可能正在启动它们?但随后他们立即退出,任务调度员说这个过程已经完成......但是没有任何东西被运行。如果这些线程没有启动或者几乎立即结束,我做错了什么?

更新:我已经为整个子程序添加了一个try catch,所以如果它们因任何原因失败,它应该发送一封电子邮件......同样的事情发生:进程启动并立即完成,没有发送电子邮件。我还添加了下面的代码,但没有任何变化。如果主要没有,线程是否会有权限问题?

    While trd4.ThreadState = ThreadState.Running
        While trd3.ThreadState = ThreadState.Running
            While trd2.ThreadState = ThreadState.Running
                While trd1.ThreadState = ThreadState.Running
                    Thread.Sleep(10000)
                End While
            End While
        End While
    End While

0 个答案:

没有答案