|
|
|
Auf letzten Timerdurchlauf warten |
|
| Joeh |

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 06.04.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009a
|
 |
|
|
 |
|
Verfasst am: 09.11.2011, 11:50
Titel: Auf letzten Timerdurchlauf warten
|
 |
| |
 |
|
Hallo,
leider stehe ich derzeit etwas auf Kriegsfuß mit Timern.
Es geht grob darum, dass in einer GUI mit einem Button ein endlos mit einer festen Frequenz laufender Timer gestoppt werden soll. Genauer gesagt soll der Timer solange normal weiter laufen, bis er in der button_callback gestoppt wird, dann soll noch bis zum Ende durchlaufen und danach soll die button_callback weiter abgearbeitet werden.
Aber leider wird in der button_callback nicht gewartet bis der Timer seinen letzten durchlauf beendet hat.
wait(timer) funktioniert leider nicht, da Can't wait with a timer that has an infinite TasksToExecute.
Außerdem prüft der wait Befehl ja nur ob 'Running' 'on' oder 'off' ist und nicht ob der letzte Durchlauf des Timers tatsächlich beendet wurde.
Eine Idee wäre es wohl den restlichen Teil der button_callback in die StopFcn des timers zu packen. Aber da der Timer an den unterschiedlichsten Stellen gestoppt werden soll, und dann auch auf Unterschiedliche Weisen fortgefahren werden soll, hätte ich dann eine recht unübersichtliche Lösung mit swich case...
Hat Jemand eine andere Idee? Vielleicht sogar einfach nur einen Befehl ähnich zu 'wait' den ich übersehen habe?
Danke schonmal!
|
|
|
|
|
|
| Joeh |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 06.04.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009a
|
 |
|
|
 |
|
Verfasst am: 11.11.2011, 13:01
Titel:
|
 |
| |
 |
|
Hallo,
leider bin ich immer noch nicht weiter. Hat denn keiner eine Idee? Ich bin für wirklich jede Anregung dankbar.
Aktuell habe ich noch folgendes probiert:
In der Button_Callback wird ein Flag gesetzt und die Programmausführung wird angehalten:
Am Ende eines Timerdurchlaufs lade ich dann die ggf geänderten Daten, stoppe den Timer wenn das Flag gesetzt ist und lasse das Hauptprogramm weiter laufen:
Und Jetzt kommt das ABER:
Denn leider wird nicht wie von mir erst gedacht der Timer von der Callback unterbrochen. Stattdessen wird scheinbar mal eine Zeile von der Callback und mal eine vom Timer ausgeführt.
Dadurch kommt es hin und wieder vor, dass uiresume ausgeführt wird bevor uiwait ausgeführt wird. Folglich wartet die Callback vergeblich darauf weiter machen zu dürfen.
Funktionieren müsste es mit der wait funktion die ich ja aber leider wie oben erwähnt nicht nehmen kann.
Kann doch nichts so ungewöhnliches sein, dass man eine Funktion erst nach dem tatsächlichen Ende eines Timers weiter laufen lassen will?!? Oder stell ich mich einfach zu blöd an?
|
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 11.11.2011, 16:18
Titel:
|
 |
Hallo Joeh,
Das Programmieren nebenläufiger Prozesse ist nicht trivial. Man benötigt wirklich ausgefeilte Konzepte, um solchen Problemen zu entgehen.
Könntest Du im Button-Callback einen bestimmten Wert im GUI setzen, z.B. den STOP-Button auf 'Enable'='off' stellen (dann kann man ihn auch nicht zweimal drücken), und danach per UIWAIT darauf warten, dass ihn der TIMER wieder ändert, nachdem er fertig geworden ist?
Gruß, Jan
|
|
|
|
| Joeh |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 06.04.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009a
|
 |
|
|
 |
|
Verfasst am: 16.11.2011, 16:07
Titel:
|
 |
Hallo Jan,
vielen Dank für deinen super Tip! war in meinem Fall insgesammt zwar nicht so leicht umzusetzen wie erhofft. Und ich habe eine Ewigkeit gebraucht um herraus zu finden warum es trotzdem immer mal wieder hängen geblieben ist
(Lösung: ein drawnow )
Aber jetzt läuft alles!
Joeh
|
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum 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. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|