Files
opensim/OpenSim/Region/OptionalModules/Scripting/Minimodule/MicroScheduler.cs
Adam Frisby 883f7dde38 * Implements Microthreading for MRM scripting.
* This is achieved through two new keywords "microthreaded" and "relax". example:
public microthreaded void MyFunc(...) {
  ...
  relax;
  ...
}
2009-04-24 05:33:23 +00:00

39 lines
1.1 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using OpenSim.Region.OptionalModules.Scripting.Minimodule.Interfaces;
namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
{
public class MicroScheduler : IMicrothreader
{
private readonly List<IEnumerator> m_threads = new List<IEnumerator>();
public void Run(IEnumerable microthread)
{
lock (m_threads)
m_threads.Add(microthread.GetEnumerator());
}
public void Tick(int count)
{
lock (m_threads)
{
if(m_threads.Count == 0)
return;
int i = 0;
while (m_threads.Count > 0 && i < count)
{
i++;
bool running = m_threads[i%m_threads.Count].MoveNext();
if (!running)
m_threads.Remove(m_threads[i%m_threads.Count]);
}
}
}
}
}