2016-06-24 5 views
-1

Ich versuche, den untenstehenden Code auszuführen. Es läuft nicht für 5 Minuten, können Sie mir bitte sagen, was das Problem hier ist. Ich versuche, dies im Hintergrund zu laufen, indem ich als .pyw speichern und mich nach dem Beenden von 1 Stunden alarmiere, gemäß was in Timer-Argumenten übergeben wird.Python-Timer in Minuten

import time 
import ctypes 
def timer(minutes): 
    seconds = minutes * 60 
    start = time.time() 
    time.clock() 
    elapsed = 0 
    while elapsed < seconds: 
     elapsed = time.time() - start 
    time.sleep(1) 
    timer(5) #would want enter in hours not in seconds 
    ctypes.windll.user32.MessageBoxA(0,"DoneToday", "Dones", 0) 
+0

laufen Sie können diese 'importierte Timer' –

+0

Waiting N Sekunden von Einfädeln durch eine stark befahrene Schleife tut eine schreckliche Idee. Ihre CPU arbeitet zu 100% und stört alles andere, was auf dem System läuft. Sie kennen bereits "time.sleep" - verwenden Sie das anstelle der Schleife. – interjay

Antwort

1

Ihre timer() Funktion Looping ist unendlich.

Nach Ihrer while elapsed < seconds: Schleife, zwei Zeilen nach unten, haben Sie timer(5) setzen. So dass sich gerade wieder ruft, und wieder, wieder ...

Sobald Sie diese Zeile entfernen, wird es wie erwartet:

timer(5) #would want enter in hours not in seconds 

Und wie @vermillon erwähnt, aus irgendeinem Grund sind Sie nicht nur macht time.sleep(minutes * 60)? Ich gehe davon aus, dass Sie vorhaben, etwas anderes in dieser Schleife zu tun, als nur die Zeit zu zählen.


Edit: Für die OP zu sehen Code

>>> def timer(minutes): 
...  seconds = minutes * 60 
...  start = time.time() 
...  time.clock() 
...  elapsed = 0 
...  while elapsed < seconds: 
...   elapsed = time.time() - start 
...  time.sleep(1) 
...  ctypes.windll.user32.MessageBoxA(0,"DoneToday", "Dones", 0) 
...  print 'also printing Done so you can see it' 
... 
>>> timer(0.1) 
also printing Done so you can see it 
>>> 
+0

timer (5) #wollte in Stunden eingeben, nicht in Sekunden .. möchte diese Zeile nicht entfernen, weil ich dieses Argument übergebe 5 Minuten – Jake

+0

Unendliche Rekursion tritt auf und die Funktion endet nie. Sie konvertieren bereits von Minuten zu Sekunden in der Zeile "Sekunden = Minuten * 60". Warum nennt sich timer() also selbst? Diese Linie hat nichts damit zu tun, was Sie versuchen zu tun. Und wenn Sie Stunden verwenden möchten, tun Sie "Sekunden = Stunden * 60 * 60" anstelle von "Minuten". Entfernen Sie die Linie wie angegeben und Sie werden sehen, dass sie genau wie erwartet funktioniert. – aneroid

+0

lief wie wie Sie gesagt haben, bemerkte ich ... aber es passiert nichts mit unten code..import Zeit Import ctypes def Timer (Minuten): \t Sekunden = Minuten * 60 \t start = time.time() \t Zeit .clock() \t verstrichene = 0 \t während verstrichen Jake