Das töten oder stoppen einer aktiven thread

Ich bin gekommen, einen langen Weg und ich bin fast da. Ich habe umgestellt von mit Gewinde zu Gewinde-und Wechsel-videos Mitte spielen, aber ich bin immer noch Schwierigkeiten haben, zu töten oder zu stoppen das erste video. Im Grunde genommen, mache ich ein video-player gesteuert durch Tasten auf einem Raspberry Pi mit OMXplayer. Im moment muss ich warten, bis ein video fertig spielen, bevor Sie eine andere Taste, sonst wird es Abstürzen, weil mehrere videos zur gleichen Zeit spielen.

Vielen Dank für jede Hilfe, die Sie Jungs anbieten können.

#!/usr/bin/python

import RPi.GPIO as GPIO
import subprocess
import threading
import time

GPIO.setmode (GPIO.BCM)
GPIO.setwarnings (False)

GPIO.setup(9, GPIO.IN)  # Button 1
GPIO.setup(10, GPIO.IN) # Button 2

def shoppingcart():
        global current_video
        while True:
                if GPIO.input(9):
                        #current_video.terminate()
                        #current_video.kill()
                        print "Play Shoppingcart"
                        time.sleep(1)
                        current_video=subprocess.Popen(['omxplayer','-b','Desktop/videos/shoppingcart.mp4'],
                                        stdin=subprocess.PIPE,stdout=subprocess.PIPE,
                                        stderr=subprocess.PIPE,close_fds=True)

def dodgeballs():
        global current_video
        while True:
                if GPIO.input(10):
                        #current_video.terminate()
                        #current_video.kill()
                        print "Play Dodgeballs"
                        time.sleep(1)
                        current_video=subprocess.Popen(['omxplayer','-b','Desktop/videos/dodgeballs.mp4'],
                                        stdin=subprocess.PIPE,stdout=subprocess.PIPE,
                                        stderr=subprocess.PIPE,close_fds=True)

v1 = threading.Thread( name='shoppingcart', target=shoppingcart ) # Videos thread
v2 = threading.Thread( name='dodgeballs', target=dodgeballs )   # Videos thread

v1.start()
v2.start()

while True:
        pass

GPIO.cleanup() #Reset GPIOs
  • Verwenden thread.stop().
  • Ich Lesen Sie einige Ihrer code... Warum nicht den gleichen thread? Und es gibt keine thread.stop() in python: docs.python.org/2/library/threading.html#thread-objects
  • Ich meinte Sie könnte, um ihn vom Erben den Thread und durch eine Boolesche sentry.
  • Ja, man könnte... Aber ich nehme an, die nächste Sache, die er tun will, ist offen anderen thread. Warum die Mühe? 🙂
  • Ich habe gerade versucht, indem Sie Sie in den gleichen thread und ich brauche noch ein Weg zu stoppen den Teilprozess oder video, bevor das nächste video abgespielt wird. Ich legte Sie in separaten threads, weil ich versucht hatte, Sie zu töten, den thread, anstatt den Teilprozess.
  • Wie ist meine Lösung?
  • Ich versuche es jetzt. Daumen drücken, ich mache es richtig. Anfänger in dem Haus hier. hahaha
  • Ja, ich habe den vollständigen code unten, wenn Sie möchten. Siehe hier.
  • Wie war es für dich?

InformationsquelleAutor jmcclaire | 2015-01-28
Schreibe einen Kommentar