2014-05-13 4 views
1

소켓 연결에서 들어오는 메시지를 수신하는 하나의 함수에서 while 루프가 있습니다.Python에서 무한 루프 스레드 2 개

def listenToMidiStream(): 
    recording = True 
    global TRACK_IS_PLAYING 

    thread = threading.Thread(target=loopIt) 
    thread.start() 

    while recording: 
     stream = CLIENT_SOCK.recv(1024) 
     message = json.loads(stream.decode()) 

     print(message) 

     if message: 
      MIDI_OUT.send_message(message) 
      if message == [250]: 
       TRACK_IS_PLAYING = True 
      elif message == [252]: 
       TRACK_IS_PLAYING = False 

이 함수가 처음 호출되면 클럭 신호를 보내는 스레드를 시작합니다. Boolean이 False로 설정되면 중지되어야합니다.

def loopIt(): 
    global TRACK_IS_PLAYING 

    while TRACK_IS_PLAYING: 
     for i in range(0,8): 
      MIDI_OUT.send_message(clock) 

     time.sleep(interval) 

이제 loopIt()이 한 번 호출됩니다. [250] 메시지가 오면 기능을 호출하거나 TRACK_IS_PLAYING을 변경할 수 없습니다. 나는 여러 가지 시도를했지만 올바른 방법으로 어떻게해야하는지 실제로 알 수 없습니다.

+0

True로 설정 한 경우에만 메시지를 보낼 것인가? – dano

+0

프로그램 상단에서 '거짓'으로 설정하십시오 – boortmans

답변

3
이에 loopIt (에 while 루프) 함수를 변경

:

while True: 
    if TRACK_IS_PLAYING: 
     for i in range(0,8): 
      MIDI_OUT.send_message(clock) 

     time.sleep(interval) 

을 이제 TRACK_IS_PLAYING는`TRACK_IS_PLAYING`가 초기화 무엇

+0

감사합니다. – boortmans

+0

반갑습니다. :) – jgrgurica