class library: SynthDef - lazy implementation of removeUGen
[supercollider.git] / HelpSource / Classes / Condition.schelp
blob9bf2c19f4ea5b3049c35a099db6f03ff934ea648
1 CLASS::Condition
2 categories::Scheduling
3 summary::block execution of a thread
5 CLASSMETHODS::
7 method::new
8 Create a new instance, set the strong::test:: variable.
10 INSTANCEMETHODS::
12 method::test
13 Return the test variable (boolean).
15 method::wait
16 Wait until the condition is true and signalled.
18 method::hang
19 Wait for strong::value:: time, regardless of test.
21 method::signal
22 If link::#-test:: is true, reschedule blocked threads.
24 method::unhang
25 Resume threads.
27 EXAMPLES::
29 code::
31 c = Condition.new(false);
33 Routine {
34         1.wait;
35         "waited for 1 second".postln;
36         1.wait;
37         "waited for another second, now waiting for you ... ".postln;
38         c.wait;
39         "the condition has stopped waiting.".postln;
40         1.wait;
41         "waited for another second".postln;
42         "waiting for you ... ".postln;
43                 c.test = false;
44                 c.wait;
45         "the condition has stopped waiting.".postln;
46         1.wait;
47         "the end".postln;
48 }.play;
51 // continue
53 c.test = true;
54 c.signal;
57 // a typical use is a routine that can pause under certin conditions:
59 c = Condition.new;
60 fork { loop { 1.wait; "going".postln; c.wait } };
62 c.test = true; c.signal;
63 c.test = false;
66 code::
67 // the same, using hang
70 c = Condition.new;
72 Routine {
73         1.wait;
74         "waited for 1 second".postln;
75         1.wait;
76         "waited for another second, now waiting for you ... ".postln;
77         c.hang;
78         "the condition has stopped waiting.".postln;
79         1.wait;
80         "waited for another second".postln;
81         "waiting for you ... ".postln;
82         c.hang;
83         "the condition has stopped waiting.".postln;
84 }.play;
87 // continue
88 c.unhang;