[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [sc-users] SystemClock-schedAbs explodes when time arg not used?
On 9/22/05, Charlls Quarra <charlls_quarra@xxxxxxxxxxxx> wrote:
> 3
> what is going on?
> 0 <---- 0? SHOULDNT IT BE 3??
Why would it be 3? 3.do will successively pass 0, 1, 2 to the i argument.
3 will never enter the loop.
> Ok, everything fine (except that strange first 0
> instead of 3) but now comment the line:
> ("current time is "++time).postln;
>
> the sclang hangs and it get stuck dumping the value
> i=0 value. This is a month or so old CVS. Should i
> update or this happens also with current cvs?
When you schedule anything on a clock, the item is rescheduled for x
beats later, where x is the return value of the item (the .yield value
for a routine, or the return value of a function). That's if x is a
SimpleNumber. If it's a non-numeric class, the item is not rescheduled
and the thread comes to an end.
When you have the
("current time is "++time).postln;
line in the function, the return value is a string, so the function is
not rescheduled. When you remove it, the return value is i (which will
be 0, 1 or 2).
When i == 0, a function will be rescheduled for immediate execution,
so that thread takes over the virtual machine and doesn't let anything
else execute. CRASH
The bottom line is, when you're scheduling a function, if there is
even the slightest chance that the function will return the number,
you should place some other value (such as nil) as the last thing in
the function unless you want it to be rescheduled. Then it's the
user's responsibility to make sure the return values are sensible for
scheduling (e.g., not 0).
Not a bug, just a programming error (one which I've made more times
than I care to admit).
For fun, try this:
(
~f = {|val| val.postln; };
3.do{arg i;
SystemClock.schedAbs( thisThread.seconds + 5.0 , {arg time;
"what is going on?".postln; ~f.value( i+1 );
// ("current time is "++time).postln;
} );
}
)
Then you'll see the threads run repeatedly.
hjh
--
James Harkins /// dewdrop world
jamshark70@xxxxxxxxxxxxxxxxx
http://www.dewdrop-world.net
"Come said the Muse,
Sing me a song no poet has yet chanted,
Sing me the universal." -- Whitman