aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/OptionalModules/Scripting/Minimodule/MicroScheduler.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/OptionalModules/Scripting/Minimodule/MicroScheduler.cs')
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/Minimodule/MicroScheduler.cs38
1 files changed, 38 insertions, 0 deletions
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/MicroScheduler.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/MicroScheduler.cs
new file mode 100644
index 0000000..a5da87b
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/MicroScheduler.cs
@@ -0,0 +1,38 @@
1using System;
2using System.Collections;
3using System.Collections.Generic;
4using System.Text;
5using OpenSim.Region.OptionalModules.Scripting.Minimodule.Interfaces;
6
7namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
8{
9 public class MicroScheduler : IMicrothreader
10 {
11 private readonly List<IEnumerator> m_threads = new List<IEnumerator>();
12
13 public void Run(IEnumerable microthread)
14 {
15 lock (m_threads)
16 m_threads.Add(microthread.GetEnumerator());
17 }
18
19 public void Tick(int count)
20 {
21 lock (m_threads)
22 {
23 if(m_threads.Count == 0)
24 return;
25
26 int i = 0;
27 while (m_threads.Count > 0 && i < count)
28 {
29 i++;
30 bool running = m_threads[i%m_threads.Count].MoveNext();
31
32 if (!running)
33 m_threads.Remove(m_threads[i%m_threads.Count]);
34 }
35 }
36 }
37 }
38}