繁体   English   中英

从另一个 IF 语句结束 While 循环

[英]End While-Loop from another IF-Statement

我正在用我的 Raspberry Pi 和 Twinkle 制作手机。 在我的示例中,我使用子进程启动 Twinkle 并检查我的代码的输出。

现在,当有人打电话来检查“结束通话按钮”时,我需要开始一个 while 循环。 这很有效,但如果远端取消呼叫,我需要结束循环。 如何从另一个 if 条件中断 while 循环?

这是我的代码,例如:

#IMPORTS
import sys
import time
import RPi.GPIO as GPIO
from multiprocessing.pool import ThreadPool
import threading

#START TWINKLE
from subprocess import Popen, PIPE

proc = Popen(["twinkle", "-c"], stdin=PIPE, stdout=PIPE, bufsize=1)

for line in iter(proc.stdout.readline, b''):
        print line

        #BUTTON WATCHER
        def button_watch():
                input_state = GPIO.input(36)
                while (input_state == False):
                        print "loop"
                        #END LOOP ON BUTTON PRESS
                        if (input_state == False):
                                print('Button Pressed')
                                input_state = GPIO.input(36)
                                GPIO.setup(32, GPIO.OUT)
                                GPIO.output(32, GPIO.LOW)
                                proc.stdin.write("answer\n")
                                time.sleep(0.2)
                                break

        #INCOMING CALL
        def main():
                if (line.find("incoming call") > 0):
                        print "call is coming"
                        GPIO.setmode(GPIO.BOARD)
                        GPIO.setup(32, GPIO.OUT)
                        GPIO.output(32, GPIO.HIGH)
                        GPIO.setmode(GPIO.BOARD)
                        GPIO.setup(36, GPIO.IN, pull_up_down=GPIO.PUD_UP)
                        #START BUTTON WATCHER ON INCOMING CALL
                        t1 = threading.Thread(target=button_watch)
                        t1.start()


        #CALL CANCELLED
        if (line.find("far end cancelled call") > 0):
                print "call was cancelled"
                GPIO.setmode(GPIO.BOARD)
                GPIO.setup(32, GPIO.OUT)
                GPIO.output(32, GPIO.LOW)
                ##############################################
                # NEED TO END WHILE LOOP FROM "button_watch" #
                ##############################################


        tmain = threading.Thread(target=main)
        tmain.start()


proc.communicate()

我添加了一条评论以寻求澄清,因为我不确定我是否完全理解意图。 现在,最终你会找到更好、更健壮的方法来做到这一点,但最简单的解决方案是检查复合条件(假设你仍然需要input_condition == False )。

因此,您可以定义一个名为remote_disconnected的全局标志,以您的 while 循环在开始时运行的方式对其进行初始化,并将其复合如下: while (input_condition == False and remote_disconnected == False):

使 button_watch 依赖于全局标志,因此您可以将标志变为 False

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM