linux: shared memory interface - link with librt
[supercollider.git] / HelpSource / Classes / Scheduler.schelp
blob0f1bf03f93a135c2abdeca484bb7e3688c6523ef
1 CLASS::Scheduler
2 categories::Scheduling
3 summary::schedules functions to be evaluated in the future
5 DESCRIPTION::
6 A Scheduler can be used to schedule and reschedule functions to be evaluated at a specific time-point. The Scheduler's time needs to be advanced manually. In most cases you will probably want to use a Clock (e.g. link::Classes/TempoClock::, link::Classes/SystemClock::, link::Classes/AppClock::) instead, in which the march of time is handled for you.
8 CLASSMETHODS::
10 method::new
11 argument::clock
12 A clock, like SystemClock.
13 argument::drift
14 If true, it will schedule the events relative to Main.elapsedTime, otherwise to the current seconds of the scheduler.
16 INSTANCEMETHODS::
18 method::play
19 Schedules the task to play, with the delta time returned from it.
21 method::sched
22 Schedule the task.
24 method::advance
25 Advance time by n seconds. Any task that is scheduled within the new time, is evaluated, and, if it returns a new time, rescheduled.
27 method::seconds
28 Set new time. Any task that is scheduled within the new time, is evaluated, and, if it returns a new time, rescheduled.
30 method::isEmpty
31 Returns whether the scheduling queue is empty.
33 method::clear
34 Clear the scheduling queue
36 EXAMPLES::
38 code::
39 a = Scheduler(SystemClock);
41 a.sched(3, { "now it is 3 seconds.".postln; nil });
42 a.sched(5, { "now it is 5 seconds.".postln; nil });
43 a.sched(1, { "now it is 1 second.".postln; nil });
45 a.advance(0.5);
46 a.advance(0.5);
47 a.advance(2);
48 a.advance(2);
50 // the beats, seconds and clock are passed into the task function:
51 a.sched(1, { arg beats, secs, clock; [beats, secs, clock].postln });
52 a.advance(1);
54 // the scheduling is relative to "now":
55 a.sched(3, { "now it was 3 seconds.".postln });
56 a.sched(5, { "now it was 5 seconds.".postln });
57 a.sched(1, { "now it was 1 second.".postln });
59 a.advance(0.5);
60 a.advance(0.5);
61 a.advance(2);
62 a.advance(2);
64 // play a Routine or a task:
65 a.play(Routine { 5.do { arg i; i.postln; 1.yield } });
66 a.advance(0.9);
69 code::
70 // scheduling tasks
72 x = Scheduler(TempoClock.default);
74 Task {
75         inf.do { |i|
76                 ("next " ++ i ++ " in task." + Main.elapsedTime).postln;
77                 0.5.wait;
78         }
79 }.play(x);
82 x.advance(0.1);
83 x.seconds;
84 x.advance(5);
85 x.seconds;
88 Routine {
89         loop { x.advance(0.1); 0.1.wait };
90 }.play;
94 Task { 5.do {
95         x.advance(1);
96         2.0.rand.wait;
97         }
98 }.play;
101 x.advance(8.1);
103 Pbind(\degree, Pseries(0, 2, 8), \dur, 0.25).play(x);
106 Task { 5.do {
107         x.advance(0.20);
108         1.0.wait;
109         }
110 }.play;