خروج حلقة على الضغط على المفتاح في أي قذيفة / محطة أو تغيير متغير

StackOverflow https://stackoverflow.com//questions/21024468

سؤال

لذلك أنا على بلدي التوت بي ، وأنا أريد أن تحقق لمعرفة ما إذا تم تنشيط جهاز استشعار.أنا يحتمل أن يهرب شيئين مختلفين على الرغم من ، واحدة من قذيفة أنني بعيد في ، والآخر قبالة شاشة لد مع بضعة أزرار متصلة مباشرة إلى ربي.وأعتقد أن أفضل طريقة للقيام بذلك هو تشغيل حلقة لمعرفة ما إذا كان المستخدم اضغط على مفتاح (مثل مفتاح إنتر أو شيء من هذا) أو إذا كانت واجهة لد قد اختارت أن تستمر.أرغب في تشغيل حلقة تتحقق مما إذا كان المستخدم قد ضغط على مفتاح أو إذا تغير متغير في مكان ما يشير إلى تغيير واجهة لد ثم انتقل إلى الكود الخاص بي ، لكنني لا أعرف أفضل طريقة للقيام بذلك.حاليا ، هذا ما لدي:

import thread
import time
import globals #this is where i keep my project wide global variables. it this this is a good way to do it.... 

try:
    from msvcrt import getch
except ImportError:
    def getch():
        import sys, tty, termios
        fd = sys.stdin.fileno()
        old_settings = termios.tcgetattr(fd)
        try:
            tty.setraw(sys.stdin.fileno())
            ch = sys.stdin.read(1)
        finally:
            termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
        return ch

char = None

def keypress():
    global char
    char = getch()

thread.start_new_thread(keypress, ())

globals.LCDVar = 0
while True:
    if char is not None:
        print "Key pressed is " + char
        break
    if globals.LCDVar == 1
      break
    time.sleep(.1)
    print "Program is running\n" 

<Run whatever code next>

يعمل هذا ، لكنني لست متأكدا مما يحدث للخيط الذي تم إنشاؤه.هل يبقى الخيط على قيد الحياة بعد الضغط على مفتاح?أنا إذا تغيير المتغير بدلا من الضغط على مفتاح, لن يكون مؤشر الترابط لا يزال هناك?سأشعر بالراحة مع هذا إذا كان الحدث سيحدث مرة أو مرتين فقط ، ولكن قد يحدث هذا الفحص بضغطة مفتاح/متغير 100 ثانية أو 1000 ثانية من المرات ولا أريد الاستمرار في بدء سلاسل رسائل جديدة مرارا وتكرارا.

هل هناك طريقة أفضل للقيام بذلك?

شكرا على أي نصيحة!!

هل كانت مفيدة؟

المحلول

يخرج مؤشر الترابط الذي قمت بإنشائه عند استدعاء الدالة start_new_thread يعود ، لذلك لا داعي للقلق بشأن تشغيله إلى الأبد (وهذا من الوثائق الرسمية على thread.start_new_thread).

بقدر ما تكون الطريقة "الأفضل" للقيام بذلك ، أعتقد أن عكس ما يتم تشغيله في مؤشر ترابط منفصل وما يتم تشغيله في خط التنفيذ الرئيسي سيكون مفيدا.وهذا هو ، لا تعمل في موضوع منفصل وانتظر الضغط على مفتاح في الموضوع الرئيسي.هذا هو تقليديا كيف يتم تنفيذ مثل هذه الوظائف ويقلل من بعض تعقيد حلقة الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top