1.11M Members

Multhreading Issue - Que Is Empty

 
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

 
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
 
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 six months: Start a new discussion instead
Post:
Start New Discussion
Tags Related to this Article