Пример #1
0
        private static void ThreadWorker()
        {
            while (true)
            {
                //Wait for pulse from ThreadPool, signifying a new work item has been queued
                // ReSharper disable once InconsistentlySynchronizedField
                ThreadSynch.WaitOne();

                var workItem = new WorkItem();
                lock (ThreadActions) {
                    //pull the next work item off of the queue
                    if (ThreadActions.Count > 0)
                    {
                        workItem = ThreadActions.Dequeue() as WorkItem;
                    }
                    //no pending actions - reset threads so they wait for next pulse.
                    else
                    {
                        lock (ThreadSynch)
                            ThreadSynch.Reset();
                    }
                }

                //if no action, go back to waiting.
                if (workItem?.Action == null)
                {
                    continue;
                }

                //nonsafe
                workItem.Action();
                if (workItem.EventType != EventType.None)
                {
                    FlightComputer.TriggerEvent(workItem.EventType, workItem.EventData, ref workItem.ArrayData);
                }
                if (workItem.Persistent)
                {
                    QueueWorkItem(workItem);
                }


                ////safe
                //try {
                //    //try to execute, then trigger any events, then re-add to queue if repeatable.
                //    workItem.Action();
                //    if (workItem.EventType != EventType.None) FlightComputer.TriggerEvent(workItem.EventType, workItem.EventData, ref workItem.ArrayData);
                //    if (workItem.Persistent) QueueWorkItem(workItem);
                //}
                //catch (Exception e) {
                //    Debug.Print("ThreadPool: Unhandled error executing action - " + e.Message + e.InnerException);
                //    Debug.Print("StackTrace: " + e.StackTrace);
                //    //maybe just reset the flight computer?
                //}
            }
        }
Пример #2
0
        private static void ThreadWorker() {

            while (true) {
                //Wait for pulse from ThreadPool, signifying a new work item has been queued
                // ReSharper disable once InconsistentlySynchronizedField
                ThreadSynch.WaitOne();

                var workItem = new WorkItem();
                lock (ThreadActions) {
                    //pull the next work item off of the queue
                    if (ThreadActions.Count > 0) workItem = ThreadActions.Dequeue() as WorkItem;
                    //no pending actions - reset threads so they wait for next pulse.
                    else lock (ThreadSynch) 
                            ThreadSynch.Reset();
                }

                //if no action, go back to waiting.
                if (workItem?.Action == null) continue;

                //nonsafe
                workItem.Action();
                if (workItem.EventType != EventType.None) FlightComputer.TriggerEvent(workItem.EventType, workItem.EventData, ref workItem.ArrayData);
                if (workItem.Persistent) QueueWorkItem(workItem);


                ////safe
                //try {
                //    //try to execute, then trigger any events, then re-add to queue if repeatable.
                //    workItem.Action();
                //    if (workItem.EventType != EventType.None) FlightComputer.TriggerEvent(workItem.EventType, workItem.EventData, ref workItem.ArrayData);
                //    if (workItem.Persistent) QueueWorkItem(workItem);
                //}
                //catch (Exception e) {
                //    Debug.Print("ThreadPool: Unhandled error executing action - " + e.Message + e.InnerException);
                //    Debug.Print("StackTrace: " + e.StackTrace);
                //    //maybe just reset the flight computer?
                //}
            }
        }