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(); } }
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(); }
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(); } }