All pastes #47493 Raw Edit

Miscellany

public text v1 · immutable
#47493 ·published 2006-03-29 18:51 UTC
rendered paste body
       public void RunThread (ThreadInfo tinfo) {
            lock (this) {
                PoolLog.Debug ("Thread {0}: got new worker", id);
                this.tinfo = tinfo;
                Monitor.Pulse (this);
            }
       }

       private void WorkerLoop () {
            while (running) {
                lock (this) {
                    if (tinfo.Equals (ThreadInfo.Zero)) {
                        PoolLog.Debug ("Thread {0}: waiting on job...", id);
                        Monitor.Wait (this);
                    }

                    if (!running) {
                        PoolLog.Debug ("Thread {0}: terminating", id);
                        break;
                    }

                    // set the principal
                    if (tinfo.Principal != null) {
                        Thread.CurrentPrincipal = tinfo.Principal;
                    }

                    try {
                        PoolLog.Debug ("Thread {0}: running job...", id);
                        if (tinfo.ThreadStart != null) {
                            tinfo.ThreadStart ();
                        } else {
                            tinfo.WaitCallback (tinfo.UserData);
                        }
                    } catch (Exception e) {
                        log.Info ("Unhandled exception: " + e);
                    } finally {
                        PoolLog.Debug ("Thread {0}: job finished", id);
                        tinfo = ThreadInfo.Zero;
                        finishTime = DateTime.Now;

                        if (Finished != null)
                            Finished (this, new EventArgs ());
                    }
                }
            }
        }