Re: About Thread Completion Notify.



Nicholas,

thanks for the reply.
The reason i cannot do what you suggest me, is that i want to keep track
from the main
thread of all the threads that i spawn, so to be able to stop a thread that
it stalls.
This is a runtime system i have build and there is a possibility for a give
request to
stall, that is, come into an endless loop and the Tn will be live forever.

So, i have to keep track of them and i want to identify and stop a nasty
thread.
This is the reason that i must keep track of the threads and they have to
notify, somehow,
the T1 for their completion status.

Imagine that every thread that i spawn, belongs to an array and when
it finish it's job, i remove it from the array.
Threads that remain in the array for a specified time, are consinered
"nasty" and
will be stop and removed from there...

Any thoughts on this ?

thanks again!




"Nicholas Paldino [.NET/C# MVP]" <mvp@xxxxxxxxxxxxxxxxxxxxxxxxxxx> wrote in
message news:eiHOzQPcFHA.2664@xxxxxxxxxxxxxxxxxxxxxxx
> objectref,
>
> Instead of using events and whatnot, why not just have the DoWork
> method call a function at the end to indicate that the task is done, and
> then perform whatever work you need to do at that point? Unless you have
> a thread somewhere else waiting on the fact that these tasks are done
> (which you probably don't since you are servicing requests in separate
> threads anyways), you shouldn't have a need for waiting on events.
>
> Hope this helps.
>
>
> --
> - Nicholas Paldino [.NET/C# MVP]
> - mvp@xxxxxxxxxxxxxxxxxxxxxxxxxxx
>
> "objectref" <objectref@xxxxxxxxxxxxx> wrote in message
> news:%23WQzMMOcFHA.1392@xxxxxxxxxxxxxxxxxxxxxxx
>> hi to all folks,
>>
>>
>> i want to create the following senario:
>> i have a T1 (Thread 1) that acts like http server that receives incoming
>> requests.
>> From that T1, i want to spawn from T1 to Tn thread jobs and beeing able
>> to be
>> notified when each of these threads finished it's job.
>>
>> I would like to implement it with the functionality of the ThreadPool,
>> i also looked at WaitHandle, WaitAny etc etc.
>>
>> I also noticed from the msdn example that if i use the
>> AutoResetEvent.Set()
>> method, i just set the state of the event to signaled but i see no way of
>> quering this and find it's state so i can understand that it is completed
>> , and the WaitAll and WaitAny stuff just blocks my T1 so all or any Tn
>> finishes it's job.
>>
>> But how i can automate this procedure and each thread notify the main T1
>> of
>> the completion of it's job ??
>>
>>
>> the following is from the msdn help:
>>
>>
>> using System;
>> using System.Threading;
>>
>> public sealed class App {
>> // Define an array with two AutoResetEvent WaitHandles.
>> static WaitHandle[] waitHandles = new WaitHandle[] {
>> new AutoResetEvent(false),
>> new AutoResetEvent(false)
>> };
>>
>> // Define a random number generator for testing.
>> static Random r = new Random();
>>
>> static void Main() {
>> AutoResetEvent are = new AutoResetEvent(false);
>> are.Set
>>
>>
>> // Queue up two tasks on two different threads;
>> // wait until all tasks are completed.
>> DateTime dt = DateTime.Now;
>> Console.WriteLine("Main thread is waiting for BOTH tasks to complete.");
>> ThreadPool.QueueUserWorkItem(new WaitCallback(DoTask), waitHandles[0]);
>> ThreadPool.QueueUserWorkItem(new WaitCallback(DoTask), waitHandles[1]);
>> WaitHandle.WaitAll(waitHandles);
>>
>> // The time shown below should match the longest task.
>> Console.WriteLine("Both tasks are completed (time waited={0})",
>> (DateTime.Now - dt).TotalMilliseconds);
>>
>> // Queue up two tasks on two different threads;
>> // wait until any tasks are completed.
>> dt = DateTime.Now;
>> Console.WriteLine();
>> Console.WriteLine("The main thread is waiting for either task to
>> complete.");
>> ThreadPool.QueueUserWorkItem(new WaitCallback(DoTask), waitHandles[0]);
>> ThreadPool.QueueUserWorkItem(new WaitCallback(DoTask), waitHandles[1]);
>>
>> int index = WaitHandle.WaitAny(waitHandles);
>> // The time shown below should match the shortest task.
>> Console.WriteLine("Task {0} finished first (time waited={1}).",
>> index + 1, (DateTime.Now - dt).TotalMilliseconds);
>> }
>>
>> static void DoTask(Object state) {
>> AutoResetEvent are = (AutoResetEvent) state;
>> int time = 1000 * r.Next(2, 10);
>> Console.WriteLine("Performing a task for {0} milliseconds.", time);
>> Thread.Sleep(time);
>> are.Set();
>> }
>> }
>>
>>
>>
>> thanks in advance fro any help
>>
>
>


.



Relevant Pages

  • Re: KeWaitForMultipleObjects
    ... > It's not obvious from the DDK docs. ... Actually I don't understand reason why ... > objects' array should be accessed while the thread is waiting. ...
    (microsoft.public.development.device.drivers)
  • spectacular crash
    ... After waiting 2 minutes, Delphi crashed & aborted. ... I suspect the reason is that the array had 32 million elements. ...
    (borland.public.delphi.non-technical)
  • Re: Non-intel benchmarks on Conroe vs AMDs AM2 FX62
    ... Are you advocating waiting, for some future "shake-out" or price ... new and promising CPU? ... much better reason to wait than are future price reductions. ...
    (comp.sys.ibm.pc.hardware.chips)
  • Re: please confirm something (jdbc)
    ... of its internal buffer so that will double the amount of memory that you need. ... That's the reason I wrote my own dynamic byte array ... Given all the memory re-allocation that goes on inside the ByteArrayOutputStream anyway, I'm not sure that one more allocation is all that much extra overhead. ... If I have two ways of coding something, and I know that one will definitely use less memory (or be quicker for whatever reason) then I will choose the one "better" one. ...
    (comp.lang.java.programmer)
  • Re: Rates
    ... before action and waiting a reasonable time is ... in the hope that you'll get paid before the other guy. ... and again this is not t he reason most invoices are late. ... interest lost by waiting. ...
    (uk.consultants)