杀死或停止活动线程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杀死或停止活动线程相关的知识,希望对你有一定的参考价值。

我走了很长的路,而且我差不多了。我已经从使用线程转换为线程,现在可以在播放过程中切换视频,但我仍然无法查看或停止第一个视频。基本上,我正在使用OMXplayer制作一个由Raspberry Pi上的按钮控制的视频播放器。目前,我必须等待一个视频完成播放才能按下另一个按钮,否则它会崩溃,因为多个视频同时播放。

非常感谢你们提供的任何帮助。

#!/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
答案

您需要实现自己的线程:

class RaspberryThread(threading.Thread):
    def __init__(self, function):
        self.running = False
        self.function = function
        super(RaspberryThread, self).__init__()

    def start(self):
        self.running = True
        super(RaspberryThread, self).start()

    def run(self):
        while self.running:
            self.function()

    def stop(self):
        self.running = False

然后从函数中删除while循环,以便将它们传递给线程。

v1 = RaspberryThread(function = shoppingcart)
v2 = RaspberryThread(function = dodgeballs)

v1.start()
v2.start()

然后你可以随时停止线程

v1.stop()
v2.stop()

以上是关于杀死或停止活动线程的主要内容,如果未能解决你的问题,请参考以下文章

Android阻止恢复活动

MySQL系列:kafka停止命令

用于较长任务的后台线程

Android销毁活动,杀死进程

如何终止或停止 C++ 中的分离线程?

如何杀死java上的线程? [复制]