Python-Zeit.schlafen auf unbestimmte Zeit
In Python time-Modul, es ist ein sleep()
- Funktion, wo Sie können Python wartet x Sekunden vor der Wiederaufnahme des Programms. Gibt es eine Möglichkeit, dies zu tun, auf unbestimmte Zeit, bis eine Bedingung erfüllt ist? Zum Beispiel:
while True:
time.sleep()
if x:
break
time.unsleep()
Ich versuche, eine pause-Funktion für meine PyGame-Programm. Jede Hilfe ist willkommen.
- Macht den thread haben zu schlafen? Von dem, was es aussieht, es muss nicht zu einer endlos-Schleife, bis die Bedingung erfüllt ist, sollte das ausreichen.
- Eine Möglichkeit zur pause (besser als der Typ, den Sie bekommen würde von
sleep()
) wird durch festlegen einer Markierung (flagpaused = True
) und nicht die Aktualisierung der game stateif paused
. - dazu führen würde, dass das Spiel zu 100% CPU, während angehalten, die unhöflich ist (macht den computer langsam und heiß, mit Strom und entleert den Akku - alle ohne Grund). Zumindest eine kurze Schlaf in der Schleife dann.
- Einige Relevanz für die Antworten an: stackoverflow.com/q/20170251/1959808
Du musst angemeldet sein, um einen Kommentar abzugeben.
Etwas wie dieses:
warten, bis
x
wahr ist, schläft es ein Zehntel einer Sekunde zwischen den Prüfungen. Dies ist in der Regel kurz genug für Ihr Skript zu scheinen, reagieren sofort (in menschlicher Hinsicht), wennx
wahr wird. Könnten Sie0.01
statt, wenn dies nicht schnell genug. In meiner Erfahrung, die heutigen Rechner sind schnell genug, dass die überprüfung eine einfache Bedingung sogar jede Hundertstel Sekunde nicht wirklich eine delle in der CPU-Auslastung.Natürlich
x
sollte etwas sein, das kann sich tatsächlich ändern, z.B. einen Aufruf der Funktion.Ihren code in die Frage impliziert, dass Sie wollen, einige andere thread wieder am Programm. In diesem Fall können Sie
resumed = threading.Event()
. Sie könnte es schaffen, in einem thread, und übergeben Sie es in eine andere:Call
resumed.set()
fortsetzen dieser code sofort.Verwenden
pygame.Zeit
. In der Regel haben Sie die main-Schleife, wo Sie aktualisieren den Status des Spiels und am Ende der Schleife rufen Sieclock.tick(60) # 60 fps
. Es ist genug, um zu verwendenpaused
Flagge in diesem Fall, überspringen Sie die Aktualisierung.forever = threading.Event(); forever.wait()
. Dies wäre nützlich, um einen Prozess, dessen einziger Zweck es ist, um interrupts behandeln (durch festlegen der Handler übersignal
). Siehe auch: groups.google.com/d/msg/gevent/Abtxtz3aZmQ/vrS7kTCqVY0J