PDA

View Full Version : Breaking while loops with timers


mape2k
03-13-2013, 05:58 AM
Hello Vizard-Team!

I have a small problem: I want to break a while loop either with a button press (works fine) or after a certain amount of time has expired. So far, I have not been able to manage it with timer functions. Is there another way? The code below shows my current status. The timer function is called correctly and expires correctly after 10s, but the global testTrig variable is not parsed and the while loop does not break.

Any thoughts? Thank you!

def test():

global testTrig

for k in range(len(presentSeq)):
testTrig = 0
while testTrig is 0:

testTrig = viz.callback(viz.TIMER_EVENT,testExpired)
viz.starttimer(0,10) # start timer with 10s

yield viztask.waitAny([waitJoyButton]) # wait for joystick button

testTrig = 1

# do some more before next iteration...

def testExpired(num):

global testTrig

testTrig = 1
print 'Expired!'
return testTrig

Jeff
03-13-2013, 06:36 AM
Are you doing anything in your while loop other than waiting for time to pass or the waitJoyButton condition? If not, it seems you could replace the while loop with something like:
yield viztask.waitAny( [ waitJoyButton, viztask.waitTime(10) ] )

mape2k
03-14-2013, 07:52 AM
Works brilliantly and much more elegant than creating a time for it...
Thanks! :)