|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
VB.NET Thread Garbage Collection2005 using threads. The basic idea is that I can have up to 10 threads going at any given time. Once a thread finishes I need to be able to "recycle" it so I can use it again when necessary. Since there is no way to "reinitialize" a thread I devised this method. Thread1 = New System.Threading.Thread(AddressOf Task1.ExecuteShell) If (Thread1.IsAlive = False) Then If (ResetFlag1 = True) Then Thread1 = Nothing GC.Collect() Thread1 = New System.Threading.Thread(AddressOf Task1.ExecuteShell) End If Task1.EventID = "1" Task1.TimerValue = Me.TimerBox.Text Thread1.Start() ResetFlag1 = True End if Basically what happens is that once the thread is used I set it to Nothing, do a GC.Collect and reset the thread to a new thread. Now my question here is will this eventually blow up because I keep creating new instances of the thread object? Or will the garbage collection I have implimented take care of it? I'm not using a "threadqueue" because I need to have direct control over the threads. Any help you could give me would be great Matt wrote:
Show quoteHide quote > Hey guys, I'm attempting to create an event scheduler though VB.Net You should not blow up and you should not call GC.Collect. The garbage > 2005 using threads. > The basic idea is that I can have up to 10 threads going at any given > time. Once a thread finishes I need to be able to "recycle" it so I > can use it again when necessary. Since there is no way to > "reinitialize" a thread I devised this method. > > Thread1 = New System.Threading.Thread(AddressOf Task1.ExecuteShell) > > If (Thread1.IsAlive = False) Then > If (ResetFlag1 = True) Then > Thread1 = Nothing > GC.Collect() > Thread1 = New System.Threading.Thread(AddressOf > Task1.ExecuteShell) > End If > Task1.EventID = "1" > Task1.TimerValue = Me.TimerBox.Text > Thread1.Start() > ResetFlag1 = True > End if > > Basically what happens is that once the thread is used I set it to > Nothing, do a GC.Collect and reset the thread to a new thread. Now my > question here is will this eventually blow up because I keep creating > new instances of the thread object? Or will the garbage collection I > have implimented take care of it? > > I'm not using a "threadqueue" because I need to have direct control > over the threads. Any help you could give me would be great > collector will handle cleaning up your old threads on its own time frame. Chris Matt,
Why do you need direct control over the threads? The reason I'm asking is because there might be a better solution. Brian Matt wrote: Show quoteHide quote > Hey guys, I'm attempting to create an event scheduler though VB.Net > 2005 using threads. > The basic idea is that I can have up to 10 threads going at any given > time. Once a thread finishes I need to be able to "recycle" it so I > can use it again when necessary. Since there is no way to > "reinitialize" a thread I devised this method. > > Thread1 = New System.Threading.Thread(AddressOf Task1.ExecuteShell) > > If (Thread1.IsAlive = False) Then > If (ResetFlag1 = True) Then > Thread1 = Nothing > GC.Collect() > Thread1 = New System.Threading.Thread(AddressOf > Task1.ExecuteShell) > End If > Task1.EventID = "1" > Task1.TimerValue = Me.TimerBox.Text > Thread1.Start() > ResetFlag1 = True > End if > > Basically what happens is that once the thread is used I set it to > Nothing, do a GC.Collect and reset the thread to a new thread. Now my > question here is will this eventually blow up because I keep creating > new instances of the thread object? Or will the garbage collection I > have implimented take care of it? > > I'm not using a "threadqueue" because I need to have direct control > over the threads. Any help you could give me would be great Brian,
Basically what we are doing is creating an event scheduler using threads in the form of a service. Each thread will spawn off an XLNT shell that will execute a job. I need to be able to halt a job if I need to, change the priority, and to check to see if the XLNT shell is still responding. Because of this it's my understanding that I need to have direct control over the threads. Everything I have read about the threadqueue which is the other way I thought about handling it, indicates that I wont have this type of control. Chris, So even though this program will potentially be running for months and months without restarting, the GC should be automatic? Matt wrote:
Show quoteHide quote > Brian, Yes. The developer should never have to deal the GC.> > Basically what we are doing is creating an event scheduler using > threads in the form of a service. Each thread will spawn off an XLNT > shell that will execute a job. I need to be able to halt a job if I > need to, change the priority, and to check to see if the XLNT shell is > still responding. Because of this it's my understanding that I need to > have direct control over the threads. Everything I have read about the > threadqueue which is the other way I thought about handling it, > indicates that I wont have this type of control. > > Chris, > > So even though this program will potentially be running for months and > months without restarting, the GC should be automatic? > Chris Matt,
Yeah, I think you're taking the right approach. I believe you're talking about the ThreadPool when you say "threadqueue". The ThreadPool is really intended for work items that run quickly. I suspect your XLNT jobs do not fall into that category. Also, you won't be able to easily terminate a work item in the ThreadPool whereas you can always use Thread.Abort as a last resort if running the job in a single thread. Though, I recommend avoiding Thread.Abort if at all possible. Brian Matt wrote: Show quoteHide quote > Brian, > > Basically what we are doing is creating an event scheduler using > threads in the form of a service. Each thread will spawn off an XLNT > shell that will execute a job. I need to be able to halt a job if I > need to, change the priority, and to check to see if the XLNT shell is > still responding. Because of this it's my understanding that I need to > have direct control over the threads. Everything I have read about the > threadqueue which is the other way I thought about handling it, > indicates that I wont have this type of control. > > Chris, > > So even though this program will potentially be running for months and > months without restarting, the GC should be automatic? Yes, "threadpool" sorry I'm new to .net :-)
As far as the Thread.Abort function we will only be using that once in a blue moon. But we need to have the option. Thanks again guys for your confirmations! Cheers!
Windows vb.net Datagrid
MDI Child Wrong Event Firing Windows Thumbnail Control Waitable Timers in VB.NET Regular Expressions Problem Failure Sending Mail exception with VS 2005 Microsoft VBScript compilation error '800a0400' New to ADO2.net Where did this come from: Microsoft\CStoVBConverter\Samples\Smart Client\ Control modifiers |
|||||||||||||||||||||||