1,105,427 Community Members

Multhreading Issue - Que Is Empty

Member Avatar
Resentful
Junior Poster in Training
55 posts since Dec 2010
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

Hello,

In my multithreaded applications, on occassion the error Que Is Empty occurs when trying to clear the que. Is there any way to prevent this from happening or catch it without causing the program to lock up? Below is the code that throws the exception.

`

  Private Sub Callback(ByVal o As Object)
            If tasks.Count > 0 Then
                Dim Task As Action
                SyncLock (Lock)
                    Task = tasks.Dequeue
            End SyncLock
        Task.BeginInvoke(AddressOf Callback, Nothing)
        Else
        Threading.Interlocked.Decrement(RunningThread)
            End If
    End Sub

Any help would be great apprecied.

Many thanks,

Resentful

Member Avatar
Ancient Dragon
Achieved Level 70
27,643 posts since Aug 2005
Reputation Points: 5,232 [?]
Q&As Helped to Solve: 3,038 [?]
Skill Endorsements: 115 [?]
Team Colleague
Featured
Sponsor
 
0
 

Do the sinclock before anything else in that function. Move line 4 up to between lines 1 and 2 and move line 6 down to line 11. If you don't want to lock the entire thread then you might consider something like this: (I'm not VB.NET expert, but I think this will work)

  Private Sub Callback(ByVal o As Object)
      Dim Task As Action = Nothing
      SyncLock (Lock)
           If tasks.Count > 0 Then
              Task = tasks.Dequeue
            END IF
      End SyncLock
      IF Task <> Nothing THEN
        Task.BeginInvoke(AddressOf Callback, Nothing)
      Else
        Threading.Interlocked.Decrement(RunningThread)
      End If
    End Sub
Member Avatar
Resentful
Junior Poster in Training
55 posts since Dec 2010
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

Thank you for your reply. I'll see if I can run the program for an hour without it locking up.

You
This article has been dead for over three months: Start a new discussion instead
Post:
Start New Discussion
Tags Related to this Article