Przeglądaj źródła

ThreadPoolScheduler.cs process改成字典

tanghai 2 lat temu
rodzic
commit
39ab4fabaf

+ 2 - 0
Unity/Assets/Scripts/Core/Game/ISingletonScheduler.cs

@@ -7,5 +7,7 @@
         void StopScheduler();
 
         void Add(Process process);
+        
+        void Remove(Process process);
     }
 }

+ 15 - 16
Unity/Assets/Scripts/Core/Game/Module/ProcessScheduler/ThreadPoolScheduler.cs

@@ -6,8 +6,7 @@ namespace ET
     public class ThreadPoolScheduler: Singleton<ThreadPoolScheduler>, ISingletonScheduler, ISingletonUpdate
     {
         private bool isStart;
-        private HashSet<Process> Processes { get; } = new();
-        private readonly List<Process> removeProcesses = new();
+        private Dictionary<int, Process> Processes { get; } = new();
         private readonly ThreadSynchronizationContext threadSynchronizationContext = new();
 
         public void StartScheduler()
@@ -24,27 +23,16 @@ namespace ET
             
             this.threadSynchronizationContext.Update();
             
-            removeProcesses.Clear();
-            foreach (Process process in this.Processes)
+            foreach ((int _, Process process) in this.Processes)
             {
                 if (process.IsRuning)
                 {
                     continue;
                 }
 
-                if (process.Id == 0)
-                {
-                    this.removeProcesses.Add(process);
-                }
-
                 process.IsRuning = true;
                 ThreadPool.QueueUserWorkItem(process.Loop);
             }
-
-            foreach (Process process in this.removeProcesses)
-            {
-                this.Processes.Remove(process);
-            }
         }
 
         public void StopScheduler()
@@ -56,7 +44,7 @@ namespace ET
             {
                 int count = 0;
                 
-                foreach (Process process in this.Processes)
+                foreach ((int _, Process process) in this.Processes)
                 {
                     if (process.IsRuning)
                     {
@@ -75,7 +63,18 @@ namespace ET
 
         public void Add(Process process)
         {
-            threadSynchronizationContext.Post(()=>this.Processes.Add(process));
+            lock (Game.Instance)
+            {
+                this.Processes.Add(process.Id, process);
+            }
+        }
+
+        public void Remove(Process process)
+        {
+            lock (Game.Instance)
+            {
+                this.Processes.Remove(process.Id);
+            }
         }
     }
 }