Ejemplo n.º 1
0
        public static void InitProcess(Process process, Priority priority)
        {
            process.Priority = priority;

            bool reenable = Scheduler.Enabled;

            if (reenable)
            {
                Scheduler.Disable();
            }

            for (int i = 0; i < process.Threads.Count; i++)
            {
                Thread t = (Thread)process.Threads[i];

                InitThread(process, t);
            }

            process.Registered = true;

            if (reenable)
            {
                Scheduler.Enable();
            }
        }
Ejemplo n.º 2
0
        private static void UpdateList(Thread t, bool skipRemove)
        {
            Scheduler.Disable(/*"Scheduler UpdateList"*/);

#if SCHEDULER_UPDATE_LIST_TRACE
            BasicConsole.Write("S > UpdateList: ");
            BasicConsole.WriteLine(t.Name);
#endif
            if (!skipRemove)
            {
#if SCHEDULER_UPDATE_LIST_TRACE
                BasicConsole.WriteLine("S > UpdateList: No skip remove");
#endif
                switch (t.LastActiveState)
                {
                case Thread.ActiveStates.NotStarted:
#if SCHEDULER_UPDATE_LIST_TRACE
                    BasicConsole.WriteLine("S > UpdateList: LastActiveState: NotStarted");
#endif
                    ActiveQueue.Delete(t);
                    break;

                case Thread.ActiveStates.Terminated:
#if SCHEDULER_UPDATE_LIST_TRACE
                    BasicConsole.WriteLine("S > UpdateList: LastActiveState: Terminated");
#endif
                    break;

                case Thread.ActiveStates.Active:
#if SCHEDULER_TRACE
                    BasicConsole.WriteLine("Scheduler > Deleting thread from Active queue...");
#endif
                    //try
                    //{
#if SCHEDULER_UPDATE_LIST_TRACE
                    BasicConsole.WriteLine("S > UpdateList: LastActiveState: Active (1x1)");
#endif
                    ActiveQueue.Delete(t);
#if SCHEDULER_UPDATE_LIST_TRACE
                    BasicConsole.WriteLine("S > UpdateList: LastActiveState: Active - done.");
#endif
                    //}
                    //catch
                    //{
                    //    BasicConsole.WriteLine("Error removing from active list:");
                    //    BasicConsole.WriteLine(ExceptionMethods.CurrentException.Message);
                    //}
                    break;

                case Thread.ActiveStates.Inactive:
#if SCHEDULER_UPDATE_LIST_TRACE
                    BasicConsole.WriteLine("S > UpdateList: LastActiveState: Inactive");
#endif
                    InactiveQueue.Delete(t);
                    break;

                case Thread.ActiveStates.Suspended:
#if SCHEDULER_UPDATE_LIST_TRACE
                    BasicConsole.WriteLine("S > UpdateList: LastActiveState: Suspended");
#endif
                    //SuspendedList.Remove(t);
                    break;
                }
            }

#if SCHEDULER_UPDATE_LIST_TRACE
            BasicConsole.WriteLine("S > UpdateList: Handling active state");
#endif
            switch (t.ActiveState)
            {
            case Thread.ActiveStates.NotStarted:
#if SCHEDULER_UPDATE_LIST_TRACE
                BasicConsole.WriteLine("S > UpdateList: ActiveState: Not Started");
#endif
                //if (!ActiveQueue.Insert(t))
                //{
                //    BasicConsole.WriteLine(t.Name);
                //}
                ActiveQueue.Insert(t);
                break;

            case Thread.ActiveStates.Terminated:
#if SCHEDULER_UPDATE_LIST_TRACE
                BasicConsole.WriteLine("S > UpdateList: ActiveState: Terminated");
#endif
                break;

            case Thread.ActiveStates.Active:
#if SCHEDULER_UPDATE_LIST_TRACE
                BasicConsole.WriteLine("S > UpdateList: ActiveState: Active");
#endif
                //if (!ActiveQueue.Insert(t))
                //{
                //    BasicConsole.WriteLine(t.Name);
                //}
                ActiveQueue.Insert(t);
                break;

            case Thread.ActiveStates.Inactive:
#if SCHEDULER_UPDATE_LIST_TRACE
                BasicConsole.WriteLine("S > UpdateList: ActiveState: Inactive");
#endif
                //if (!InactiveQueue.Insert(t))
                //{
                //    BasicConsole.WriteLine(t.Name);
                //}
                InactiveQueue.Insert(t);
                break;

            case Thread.ActiveStates.Suspended:
#if SCHEDULER_UPDATE_LIST_TRACE
                BasicConsole.WriteLine("S > UpdateList: ActiveState: Suspended");
#endif
                //SuspendedList.Add(t);
                break;
            }
#if SCHEDULER_UPDATE_LIST_TRACE
            BasicConsole.WriteLine("S > UpdateList: Done.");
#endif
            Scheduler.Enable();
        }
Ejemplo n.º 3
0
        private static void UpdateList(Thread t, bool skipRemove)
        {
            bool reenable = Scheduler.Enabled;

            if (reenable)
            {
                Scheduler.Disable();
            }

            if (!skipRemove)
            {
                switch (t.LastActiveState)
                {
                case Thread.ActiveStates.NotStarted:
                case Thread.ActiveStates.Terminated:
                    break;

                case Thread.ActiveStates.Active:
#if SCHEDULER_HANDLER_TRACE
                    BasicConsole.WriteLine("Scheduler > Deleting thread from Active queue...");
#endif
                    ActiveQueue.Delete(t);
                    break;

                case Thread.ActiveStates.Inactive:
                    InactiveQueue.Delete(t);
                    break;

                case Thread.ActiveStates.Suspended:
                    SuspendedList.Remove(t);
                    break;
                }
            }

            switch (t.ActiveState)
            {
            case Thread.ActiveStates.NotStarted:
                ActiveQueue.Insert(t);
                break;

            case Thread.ActiveStates.Terminated:
                break;

            case Thread.ActiveStates.Active:
                ActiveQueue.Insert(t);
                break;

            case Thread.ActiveStates.Inactive:
                InactiveQueue.Insert(t);
                break;

            case Thread.ActiveStates.Suspended:
                SuspendedList.Add(t);
                break;
            }

            if (reenable)
            {
                Scheduler.Enable();
            }
        }