Avatar of ryanmaves
ryanmaves asked on

Creating multithreads against the same class and joining them together after. vb.net

I have searched as long as my eyes can take it and can't find quite the solution I need.  I'm creating an application that will run multiple SQL queries against a data set and rather than wait for each to finish in turn, I would like to kick off 2 at a time (using different threads for each).  The following code seems to work to create one additional thread that works, but anything beyond that seems to get destroyed (or doesn't work).

'First I create a data reader that determines how many total SQL queries need to be run
'I then loop through them...and I'm TRYING (failing) to run 2 concurrently...then waiting
'for them to finish...then moving on to the next 2

'Inside the RUNSQL class, I'm just running a simple statement and getting one value back...

'What is really strange is that if I run this in debug mode and step through it, it works...so
'the code must be stepping on itself in "real time"

'In the real code I'm trying to run 5 threads, but I've cut it back for brevity sake

If oRST.HasRows Then
            Dim intCounter As Integer = 0
            Dim oThread(1) As System.Threading.Thread
            Dim oRunSQL As New RunSQL
            Do While 1 = 1
                oRST.Read()
                intFTPKey = oRST.Item("ftp_key")
                If Err.Number <> 0 Then Exit Do
                strSQL = oRST.Item("ifs_sql").ToString
                oThread(intCounter) = New Thread(AddressOf oRunSQL.Runner)
                oRunSQL.vSQL = strSQL 'This is where I pass the unique SQL statement to the new thread
                oThread(intCounter).IsBackground = True
                oThread(intCounter).Start()
                intCounter = intCounter + 1
                If intCounter = 1 Then
                    intCounter = 0
                    oThread(0).Join()
                    oThread(1).Join()
 
                End If
            Loop
            oThread(0).Join()
            oThread(1).Join()
        End If

Anyone know what the heck I'm missing here???
Visual Basic.NETProgramming Languages-Other.NET Programming

Avatar of undefined
Last Comment
sarabande

8/22/2022 - Mon
ShazbotOK

Your setting your int counter to 1 right away before you evaluate if the counter equals 1... therefore it will allways enter the if statement on the 1st pass.

move your incrementer to after your (if) statement so it increments 1 after the fact.
ASKER
ryanmaves

You're right...but that won't solve the real issue.  I modified the code down to 2 threads...the original was checking to see if intCounter was equal to 5....(I just slimmed it down after being too tired).

When testing, I tested against a possible two threads but used code that I hoped would handle 5....so there were only two passes through the code (neither of which would have triggered the IF intCounter = 5).
sarabande

Dim oThread(1) As System.Threading.Thread

Open in new window

how can you use two threads with that?

you also may post the thread code. if two threads are dealing with the same database, you should have a separate connection for each (1 environment) or the threads would mix-up their statements and results.

Sara
Your help has saved me hundreds of hours of internet surfing.
fblack61
ASKER
ryanmaves

I can post the thread code, but in short...the code is in a class and within the worker sub the connection is declared, started, and closed.  I thought that doing so would essentially create a new connection for each thread.  If that's wrong, then I suppose I can't use it.
ASKER CERTIFIED SOLUTION
sarabande

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
See how we're fighting big data
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question