[chuck-users] a little debugging help for frozen VM!
Scott Hewitt
wittlist at googlemail.com
Fri May 25 19:56:44 EDT 2012
Hi,
I have often wondered if this behaviour should be detected by the
compiler / VM and cause an error to occur
I have actually used this behaviour to illustrate a wider security
concern in a paper accepted to the upcoming ICMC
And that is a cool first ChucK problem Chris!!
On Fri, May 25, 2012 at 8:57 PM, Andrew Turley <aturley at acm.org> wrote:
> Your code never gets out of the first while-loop. Among other things,
> that means that you never make it to the pedEvent handler. I'm not
> entirely sure what you're trying to do, but I think you want something
> more like this:
>
> //begincode
>
> Machine.add("justa.ck"); //class of frequency definitions
> Machine.add("pedestrianSender.ck"); //OSC sender of int values
>
> OscRecv receiver; //OSC receiver object
> 6449 => receiver.port;
> receiver.listen();
> receiver.event("weather/pedestrian, int") @=> OscEvent pedEvent;
>
> -1 => int b3base1; //int to store a shred ID
> -1 => int b3base2; //ditto
>
> 25 => int pedCount; //int to store pedCount sent via OSC
>
> while (pedEvent.nextMsg() != 0) {
> pedEvent.getInt() => pedCount;
>
> //if the pedCount is greater than 20 (a value which will be sent via
> OSC) and b3base1 is equal to -1, i.e. the shred isn't currently
> running,
> //add both shreds to the VM and assign their shred ID to the b3base1
> and b3base2
>
> if (pedCount > 20 && b3base1 == -1) {
> Machine.add("b3base.ck") => b3base1;
> Machine.add("b3base.ck") => b3base2;
> }
>
> else {
>
> //if the pedCount is less than 20, remove both shreds from the VM
> and assign -1 to their value so that if the pedCount goes back above
> 20 they
> //meet the conditional.
>
> if (pedCount < 20 && b3base1 != -1) {
> Machine.remove(b3base1);
> Machine.remove(b3base2);
> -1 => b3base1;
> -1 => b3base2;
> }
> }
>
> while( pedEvent.nextMsg() != 0) {
> pedEvent.getInt() => pedCount;
> 2::second => now;
> }
> }
>
> //endcode
>
> If you need to run through the loop once when you start then you could
> use a do-while-loop instead of a while-loop
> (http://chuck.cs.princeton.edu/doc/language/ctrl.html#while).
>
> andy
>
> On Fri, May 25, 2012 at 3:32 PM, [chriswicks] <crwicks at yahoo.com> wrote:
>> Hey, all. I'm attempting to build something that shifts layers of ChucK
>> files based on OSC events, and I hit a snag really early on. I'm a
>> relatively new programmer, so hopefully this isn't too stupid of a question,
>> but I've got an issue that freezes the virtual machine and doesn't play any
>> sound or send any OSC events. Nothing happens..the VM shows that the shreds
>> are added, and then it just freezes and I have to force quit...it won't take
>> a --removeall or --kill command or anything. Individually, each file works
>> as it should, aside from the file whose code I am including here. I think I
>> may be missing a key concept as to the way Machine.add works and how it
>> assigns the value of the shred to an int, but I'm just not sure. If anyone
>> can give me some direction here as to what might be happening I'd appreciate
>> it! I've tried advancing time in various places, setting my initial
>> pedCount to various values, all to no avail. Thanks very much, and please
>> let me know if this is unclear in any way.
>>
>> //begincode
>>
>> Machine.add("justa.ck"); //class of frequency
>> definitions
>> Machine.add("pedestrianSender.ck"); //OSC sender of int values
>>
>> OscRecv receiver; //OSC receiver object
>> 6449 => receiver.port;
>> receiver.listen();
>> receiver.event("weather/pedestrian, int") @=> OscEvent pedEvent;
>>
>> -1 => int b3base1; //int to store a shred ID
>> -1 => int b3base2; //ditto
>>
>> 25 => int pedCount; //int to store pedCount sent via OSC
>>
>> while (true) {
>>
>> //if the pedCount is greater than 20 (a value which will be sent via OSC)
>> and b3base1 is equal to -1, i.e. the shred isn't currently running,
>> //add both shreds to the VM and assign their shred ID to the b3base1 and
>> b3base2
>>
>> if (pedCount > 20 && b3base1 == -1) {
>> Machine.add("b3base.ck") => b3base1;
>> Machine.add("b3base.ck") => b3base2;
>> }
>>
>> else {
>>
>> //if the pedCount is less than 20, remove both shreds from the VM and
>> assign -1 to their value so that if the pedCount goes back above 20 they
>> //meet the conditional.
>>
>> if (pedCount < 20 && b3base1 != -1) {
>> Machine.remove(b3base1);
>> Machine.remove(b3base2);
>> -1 => b3base1;
>> -1 => b3base2;
>> }
>> }
>>
>> while( pedEvent.nextMsg() != 0) {
>> pedEvent.getInt() => pedCount;
>> 2::second => now;
>> }
>> }
>>
>> //endcode
>>
>> _______________________________________________
>> chuck-users mailing list
>> chuck-users at lists.cs.princeton.edu
>> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
>>
> _______________________________________________
> chuck-users mailing list
> chuck-users at lists.cs.princeton.edu
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
More information about the chuck-users
mailing list