Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
pwprotokoll •->

Anmeldedatum: 16.09.2007 Beiträge: 5
|
Verfasst am: 17.09.2007 - 10:44 Titel: Delay/Sleep-Alternative |
|
|
Hier handelt es sich um einen Follow-Up von jenem Thread. Der alte Thread kann gelöscht werden. Freue mich über jede Art von Hilfestellung. Vielen Dank.
Zitat: | Hi,
vorerst einmal ein großes Kompliment. Finde dieses Forum wirklich Spitze und lese schon eine Weile mit. Bei Problemen musste ich einfach nur mal ne kurze Weile suchen oder im Tutorial nachschauen - habe immer nützliche Antworten gefunden.
Zu meinem jetzigen Problem konnte ich leider seit ein paar Tagen keine Lösung finden. Wäre total super, wenn ich hier ne brauchbare Antwort finden würde. Dann will ich mal:
Ich bin momentan an einem Programm, dass eine bestimmte Funktion nach einer gewissen Zeit ausführen soll. Diese Zeit wird vom Benutzer angegeben und der sog. "Timer" wird mithilfe eines Buttons gestartet. Den eigentlichen Timer bis zum Ausführen der Aktion konnte ich mittels des "delay"- oder dem "sleep"-Befehls erreichen. So weit, so gut. Nun dient der Button, mit dem der Timer gestartet wird, als ein An- und Aus-Schalter. Drücke ich Start, beginnt der Timer - sollte es sich der User jedoch nochmal anders überlegen, soll er doch bitte den gleichen Button (während des laufenden Timers mit "Stop" betitelt) drücken können. Problem ist hier allerdings, dass das Window beim delay- und sleep-Befehl regelrecht gefreezed ist und ich keine Möglichkeit habe, den Stop-Button zu drücken.
Deshalb meine Frage: Gibt es irgendeine Alternative zu delay oder sleep, die mich den Ablauf eines Code-Abschnittes für eine gewisse Anzahl von Sekunden (oder whatever) pausieren lässt, jedoch noch Benutzereingaben zulässt und das Fenster nicht komplett freezed?
Vielen Dank für eure Antworten,
pwprotokoll |
|
|
Nach oben |
|
 |
chebfarid •-->


Anmeldedatum: 10.02.2007 Beiträge: 106 Wohnort: Milano
|
Verfasst am: 17.09.2007 - 19:00 Titel: Re: Delay/Sleep-Alternative |
|
|
pwprotokoll hat Folgendes geschrieben: | Deshalb meine Frage: Gibt es irgendeine Alternative zu delay oder sleep, die mich den Ablauf eines Code-Abschnittes für eine gewisse Anzahl von Sekunden (oder whatever) pausieren lässt, jedoch noch Benutzereingaben zulässt und das Fenster nicht komplett freezed? |
Ciao,
Du kannst alternativ einen Repeatloop laufen lassen, der die aktuelle Systemzeit mit der Wartezeit vergleicht und Dein Programm solange in den Wartezustand versetzt. Mit dem von Dir genannten Button kannst Du dann wenn gewuenscht den Loop unterbrechen.
Damit das klappt, musst Du in den Repeatloop die Zeile
einbauen, damit das Skript die Initiative zurueckbekommt und nicht durch den Loop miteingefroren wird. (Es geht auch mit "Return 0" oder "Return 'Gurkensalat')
Ganz einfaches Beispiel mit einem Textfenster und einem Button:
Code: | property textPause : "Dieses Fenster ist momentan in Pause..."
property textContinue : "Hier bin ich wieder!"
property sekundenPause : 30 -- seconds
on clicked theObject
if name of theObject = "freezeButton" then
if title of the button "freezeButton" of window "main" is "Pause" then
my pauseApp()
else
my continueApp()
end if
end if
end clicked
on pauseApp()
set fd to (current date) + sekundenPause
repeat
if (current date) < fd then
set contents of text view "theText" of scroll view "textBox" of window "main" to (textPause)
set editable of text view "theText" of scroll view "textBox" of window "main" to false
set title of button "freezeButton" of window "main" to "Weiter"
return true
else
my continueApp()
exit repeat
end if
end repeat
end pauseApp
on continueApp()
set contents of text view "theText" of scroll view "textBox" of window "main" to textContinue
set editable of text view "theText" of scroll view "textBox" of window "main" to true
set title of button "freezeButton" of window "main" to "Pause"
end continueApp |
Good scripting
Farid _________________ Abends lustig morgens triste
Das ist Leben von Artiste |
|
Nach oben |
|
 |
pwprotokoll •->

Anmeldedatum: 16.09.2007 Beiträge: 5
|
Verfasst am: 18.09.2007 - 08:54 Titel: |
|
|
Hi chebfarid,
vielen vielen Dank für deine Hilfe. Die gleiche Idee mit dem Vergleichen der Zeit kam mir auch vor wenigen Tagen, dennoch dachte ich, dass ich den Timestamp mit einer riesigen Prozedur formatieren müsste, damit ich diese zwei Werte ordentlich vergleichen kann. Aus diesem Grund hatte ich mir die Idee wieder schnell ausm Kopf geschlagen.
Du zeigst, dass es anders geht. Wirklich vielen vielen Dank, werde das heute Abend umgehend testen. Ich berichte dann mal, ob es funktioniert.
EDIT: Habe es gestern Abend mit der o.g. Methode versucht und musste feststellen, dass es nichts half. Durch die Schleife war das Teil wohl so beschäftigt, dass ich während der Schleife wieder nicht die Möglichkeit hatte, den Button zu drücken. Der Zeitabgleich funktioniert jedoch tadelos, lediglich das ganze abbrechen ist mir nicht möglich.
Meine vereinfachte Methode sieht in etwa so aus:
Code: | set theDate to (current date) + theMinutes * minutes
repeat while (current date) < theDate
end repeat |
theMinutes ist vom Typ number und wird vorher initialisiert. Nach der Schleife (der eigentlichen Wartezeit), sollen weitere Anweisungen folgen. Die Schleife mit einem Button-Klick zu beenden ist mir auch hier nicht möglich, da das Window wieder gefreezed ist.
Liegt der Fehler bei mir und meinem Beispiel? Mit obigem Beispiel von dir, chebfarid, lief es ebenfalls nicht. Vielen Dank für eure Antworten.
Vielen Dank und viele Grüße,
pwprotokoll |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2002 phpBB Group Deutsche Übersetzung von phpBB.de
|
|
|