Python, функция потока не выполняется, и объект исчезает
Мы пытаемся запустить этот код на Python, но пока работает функция print_time, TestReactionTime не выполняется (даже не печатает). Вызовы обеих функций идентичны.
Также и независимо, когда мы впервые отпускаем мяч и пытаемся снова его схватить, он исчезает.
Любая помощь с любой из проблем будет благодарна.
(Программа, которую мы используем, это Vizard)
import viz
import math
import viztask
import vizinfo
import thread
import time
count = 0
boolTime = False
viz.setMultiSample(4)
viz.fov(20)
viz.go()
viz.phys.enable()
viz.phys.setGravity( [0, 0, 0] )
viz.window.setFullscreen()
viz.setOption('viz.model.apply_collada_scale',1)
ball = viz.add('ball.dae')
ball.setPosition([-0.1,1.5,4])
#ball.setScale([0.75,0.75,0.75])
ball.collideSphere()
viz.setOption('viz.model.apply_collada_scale',1)
path = viz.addChild('path.dae')
path.setPosition([-1,1.0,4])
path.collideMesh()
#collision
path.enable(viz.COLLIDE_NOTIFY)
def onCollide(e):
global count
count = count+1
print(count)
viz.callback( viz.COLLIDE_BEGIN_EVENT, onCollide )
#mouse
viz.mouse.setOverride(viz.ON)
link = None
**def TestReactionTime(threadName):**
print 'boolTime: '
print(boolTime)
while boolTime:
#Wait for next frame to be drawn to screen
d = yield viztask.waitDraw()
#Save display time
displayTime = d.time
#Wait for keyboard reaction
d = yield viztask.waitMouseUp(viz.MOUSEBUTTON_LEFT)
#Calculate reaction time
reactionTime = d.time - displayTime
print(reactionTime)
def print_time( threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print "%s: %s" % ( threadName, time.ctime(time.time()) )
def grabBall():
global link
global boolTime
boolTime = True
print("grab ")
print(boolTime)
try:
#thread.start_new_thread( TestReactionTime,() )
thread.start_new_thread( TestReactionTime, ("Thread-3", ) )
thread.start_new_thread( print_time, ("Thread-1", 2, ) )
print("execute thread")
except:
print "Error: unable to start thread"
link = viz.grab( viz.Mouse, ball )
def releaseBall():
global link,boolTime
boolTime = False
link.remove()
link = None
vizact.onmousedown(viz.MOUSEBUTTON_LEFT,grabBall)
vizact.onmouseup(viz.MOUSEBUTTON_LEFT,releaseBall)
1 ответ
После того, как вы создаете темы, вы должны join
их так, что основная программа ожидает завершения выполнения каждого потока.
thread
Модуль не предоставляет никаких условий для ожидания потока. Вы должны использовать рекомендованный Threading
модуль
изменить thread.start_new_thread
звонки с Thread()
from threading import Thread
#do something
try:
thread1 = Thread( target = TestReactionTime, args = ("Thread-3", ) )
thread2 = Thread( target = print_time, args = ("Thread-1", 2, ) )
thread1.start()
thread2.start()
thread1.join()
thread2.join()
#do the rest