On 21 Apr 2009, at 21:32, Kassen wrote:
Like this?
fun void foo() { while(1) { <<<"beep">>>; second => now; } }
spork ~foo() @=> Shred bar;
3::second => now;
bar.exit(); second => now; <<<"bye">>>;
I think that tried that one, and it didn't work. Possibly because it gets stuck in <delay> => now; - your example allows jumping out of it in the 'while-loop.
Sadly there is currently a bug when we define a Shred object and later assign a actual shred to it; this will crash ChucK. This bug was likely caused by the last update which attempted to clean up the relationship between Shred objects and actual running processes (this wasn't always a very clear relationship).
I didn't try that one (I think) - I used references @=>, both in an array, and as a single global variable. exit() on such a reference while the thread was stuck in '<delay> => now' didn't work.
You can also have the Shred report it's number using me.id() inside that shred and set Machine.remove(int id ) loose on that.
If this crashing bug bothers you (and it likely will) you can use this construct to get a shred's id number while sporking it; <<<(spork ~foo()).id()>>>;
This integer can then be used with Machine.remove() to remove the shred.
So this is perhaps what I should try, though using exit() on the thread.
There are more illustrations in /examples/shred/
I think that should get you out of trouble? I can't recommend the / examples/ directory highly enough as a resource.
I grepped 'exit()' on the whole examples directory, but all finds were 'my.exit()', so it did not seem to apply. Hans