diff options
author | Adam Frisby | 2009-04-24 05:33:23 +0000 |
---|---|---|
committer | Adam Frisby | 2009-04-24 05:33:23 +0000 |
commit | 883f7dde3884bca10f324f6a31e0882cf23c04d8 (patch) | |
tree | 53cdc16d97034bc125c148086c689badcc7f2906 /OpenSim/Region/OptionalModules/Scripting/Minimodule/Test | |
parent | Update svn properties. (diff) | |
download | opensim-SC_OLD-883f7dde3884bca10f324f6a31e0882cf23c04d8.zip opensim-SC_OLD-883f7dde3884bca10f324f6a31e0882cf23c04d8.tar.gz opensim-SC_OLD-883f7dde3884bca10f324f6a31e0882cf23c04d8.tar.bz2 opensim-SC_OLD-883f7dde3884bca10f324f6a31e0882cf23c04d8.tar.xz |
* Implements Microthreading for MRM scripting.
* This is achieved through two new keywords "microthreaded" and "relax". example:
public microthreaded void MyFunc(...) {
...
relax;
...
}
Diffstat (limited to 'OpenSim/Region/OptionalModules/Scripting/Minimodule/Test')
-rw-r--r-- | OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/Microthreads/MicrothreadSample.txt | 40 | ||||
-rw-r--r-- | OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/TestModule.cs | 43 |
2 files changed, 83 insertions, 0 deletions
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/Microthreads/MicrothreadSample.txt b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/Microthreads/MicrothreadSample.txt new file mode 100644 index 0000000..dc15c47 --- /dev/null +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/Microthreads/MicrothreadSample.txt | |||
@@ -0,0 +1,40 @@ | |||
1 | //MRM:C# | ||
2 | using System.Collections; | ||
3 | using System.Collections.Generic; | ||
4 | using OpenSim.Region.OptionalModules.Scripting.Minimodule; | ||
5 | |||
6 | namespace OpenSim | ||
7 | { | ||
8 | class MiniModule : MRMBase | ||
9 | { | ||
10 | public microthreaded void MicroThreadFunction(string testparam) | ||
11 | { | ||
12 | Host.Object.Say("Hello " + testparam); | ||
13 | |||
14 | relax; // the 'relax' keyword gives up processing time. | ||
15 | // and should be inserted before, after or in | ||
16 | // any computationally "heavy" zones. | ||
17 | |||
18 | int c = 500; | ||
19 | while(c-- < 0) { | ||
20 | Host.Object.Say("C=" + c); | ||
21 | relax; // Putting 'relax' in microthreaded loops | ||
22 | // is an easy way to lower the CPU tax | ||
23 | // on your script. | ||
24 | } | ||
25 | |||
26 | } | ||
27 | |||
28 | public override void Start() | ||
29 | { | ||
30 | Host.Microthreads.Run( | ||
31 | MicroThreadFunction("World!") | ||
32 | ); | ||
33 | } | ||
34 | |||
35 | public override void Stop() | ||
36 | { | ||
37 | |||
38 | } | ||
39 | } | ||
40 | } | ||
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/TestModule.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/TestModule.cs index 702ac74..73af7f0 100644 --- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/TestModule.cs +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Test/TestModule.cs | |||
@@ -25,12 +25,55 @@ | |||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System.Collections; | ||
29 | using System.Collections.Generic; | ||
28 | using OpenSim.Region.OptionalModules.Scripting.Minimodule; | 30 | using OpenSim.Region.OptionalModules.Scripting.Minimodule; |
29 | 31 | ||
30 | namespace OpenSim | 32 | namespace OpenSim |
31 | { | 33 | { |
32 | class MiniModule : MRMBase | 34 | class MiniModule : MRMBase |
33 | { | 35 | { |
36 | // private microthreaded Function(params...) | ||
37 | private IEnumerable TestMicrothread(string param) | ||
38 | { | ||
39 | Host.Console.Info("Microthreaded " + param); | ||
40 | // relax; | ||
41 | yield return null; | ||
42 | Host.Console.Info("Microthreaded 2" + param); | ||
43 | yield return null; | ||
44 | int c = 100; | ||
45 | while(c-- < 0) | ||
46 | { | ||
47 | Host.Console.Info("Microthreaded Looped " + c + " " + param); | ||
48 | yield return null; | ||
49 | } | ||
50 | } | ||
51 | |||
52 | public void Microthread(IEnumerable thread) | ||
53 | { | ||
54 | |||
55 | } | ||
56 | |||
57 | public void RunMicrothread() | ||
58 | { | ||
59 | List<IEnumerator> threads = new List<IEnumerator>(); | ||
60 | threads.Add(TestMicrothread("A").GetEnumerator()); | ||
61 | threads.Add(TestMicrothread("B").GetEnumerator()); | ||
62 | threads.Add(TestMicrothread("C").GetEnumerator()); | ||
63 | |||
64 | Microthread(TestMicrothread("Ohai")); | ||
65 | |||
66 | int i = 0; | ||
67 | while(threads.Count > 0) | ||
68 | { | ||
69 | i++; | ||
70 | bool running = threads[i%threads.Count].MoveNext(); | ||
71 | |||
72 | if (!running) | ||
73 | threads.Remove(threads[i%threads.Count]); | ||
74 | } | ||
75 | } | ||
76 | |||
34 | public override void Start() | 77 | public override void Start() |
35 | { | 78 | { |
36 | // Say Hello | 79 | // Say Hello |