2011-01-14 19 views
2

Ich habe eine START und STOP Taste. Wenn ich START drücke, führe ich eine Menge Code in meinem Callback aus. Es ist im Grunde ein sequenzielles "Skript", das Ventile öffnet, Wasser ausgibt und dann die Ventile schließt ... es gibt keine while() - Schleife und es wiederholt sich nicht. Ich möchte diesen Vorgang jederzeit mit der STOP-Taste beenden können. Die meisten verwandten Antworten, die ich gesehen habe, sind in den Fällen, in denen eine while() -Schleife verwendet wird. Einige Leute haben auch vorgeschlagen, regelmäßig zu überprüfen, ob die STOP-Taste gedrückt wurde (mit einer Variablen oder Handle-Variable).Einen MATLAB GUI Callback stoppen

Da ich keine While-Schleife habe, kann ich es nicht so lösen. Außerdem möchte ich in der Lage sein, sofort zu beenden, ohne in regelmäßigen Abständen überprüfen zu müssen (weil die mehrfache Überprüfung in meinem Code hässlich und verwirrend wäre). Gibt es eine Möglichkeit, den Rückruf zu beenden, der durch die STOP-Taste unterbrochen wurde? Wenn nicht, ist es möglich, dass die START-Schaltfläche eine .m-Datei ausführt und dann die STOP-Schaltfläche die .m-Datei beendet?

Das Worst-Case-Szenario wäre eine periodische Überprüfung einer Variablen.

UPDATE: Nun, sieht aus wie das Worst-Case-Szenario ist, was von MATLAB vorgeschlagen ... http://www.mathworks.com/support/solutions/en/data/1-33IK85/index.html?product=ML&solution=1-33IK85

Dank.

+0

Die Alternative ist 'ctrl + c', aber das ist chaotisch und wahrscheinlich nicht das, was Sie wirklich wollen. – Jonas

+0

Ja, leider möchte ich nicht, dass der Benutzer diese Tasten drücken muss. Ich denke nicht, dass es eine Möglichkeit gibt, programmgesteuert ctrl + c zu machen ... – leonhart88

Antwort

2

Ob es eine Schleife ist oder nicht, Sie werden gezwungen, 'Prüfpunkte' in Ihrem Code einzufügen, wo die Programmausführung fortgesetzt oder gestoppt werden soll. Wenn Sie functions betrachten, wird der Befehl return die Ausführung an einem gewünschten Punkt fortsetzen.

Alles, was Sie wählen können, ist die "Methode" der "Stop Trigger" -Ausbreitung unter Verwendung von Events and Listeners oder der von The MathWorks bereitgestellten Lösung.

+0

Danke ... das dachte ich, aber ich hatte gehofft, dass es einen Weg geben würde, den suspendierten Callback in den Griff zu bekommen und ihn irgendwie zu beenden. Das Lesen der MATLAB-Dokumentation über Interrupts besagt jedoch ausdrücklich, dass dies nicht möglich ist. Ich vermute, ich werde versuchen, meinen Code aufzulösen und Checkpoints in die am besten geeigneten Bereiche einzufügen ... Danke! – leonhart88