[chuck-users] Killing thread from without

Hans Aberg haberg at math.su.se
Tue Apr 21 15:13:04 EDT 2009


Is it possible to kill a thread by saving a reference and calling  
exit() (or something) on that reference? Are there any means by which  
a created thread can be manipulated from without it by its reference?

On a keyboard, I want a generator to be disconnected first some time  
after a key has been released - otherwise the sound will be truncated.  
How long depends on the generator, so I want to be able to set it  
arbitrarily. Then the problem is when the key is depressed again  
before this waiting time for disconnect has elapsed. One way to fix it  
is to let the thread check if the key has been depressed again, say by  
looking at the key down times, and if so, just skip the disconnect.

But in order to avoid threads hanging around, it would be more  
logically to kill off the old one when the key is depressed again, as  
it is not needed anymore. So then write this function:
   BeeThree s[13][5]; // Sound generator for key coordinates x, y.
   ...
   fun void schedule_note_disconnect(int x, int y, dur t) {
     t => now;
     s[x][y] =< r;
   }
When a key with coordinates x, y is released, schedule a disconnect:
   Shred @ note_disconnect[13][5];
   ...
   1 => s[x][y].noteOff;
   spork ~ schedule_note_disconnect(x, y, 1100::ms) @=>  
note_disconnect[x][y];

Then, when a key is depressed, I want to cheer it up using:
   if (note_disconnect[x][y] != null)
     note_disconnect[x][y].exit();
   // Connect, set frequency and note on.

However, it is easy to see that this exit(), though syntactically  
legal, does not affect the thread at all. So in the example above, a  
long note following one (on the same key) shorter than 1100::ms will  
be cut off.

    Hans




More information about the chuck-users mailing list