2011-01-14 2 views
2

У меня есть кнопка START и STOP. Когда я нажимаю START, я запускаю кучу кода в своем обратном вызове. Это в основном последовательный «сценарий», который открывает клапаны, распределяет воду, а затем закрывает клапаны ... нет цикла while(), и она не повторяется. Я хочу, чтобы остановить этот процесс в любое время с помощью кнопки STOP. Большинство связанных ответов, которые я видел, относятся к случаям, когда используется цикл while(). Некоторые люди также предлагали периодически проверять, была ли нажата кнопка STOP (с переменной или переменной обработки).Остановка обратного вызова GUI MATLAB

Так как у меня нет цикла while, я не могу решить его таким образом. Кроме того, я хотел бы иметь возможность выйти немедленно, без необходимости периодически проверять (потому что проверка нескольких раз в моем коде была бы уродливой и запутанной). Есть ли способ прекратить обратный вызов, который был прерван кнопкой STOP? Если нет, возможно ли запустить кнопку START с файлом .m, а затем остановить кнопку STOP в этом файле .m?

Худший вариант сценария - периодически проверять переменную.

UPDATE: Ну, похоже, что в худшем случае является то, что предлагается по MATLAB ... http://www.mathworks.com/support/solutions/en/data/1-33IK85/index.html?product=ML&solution=1-33IK85

Спасибо.

+0

Альтернатива нажимает 'ctrl + c', но это грязно и, вероятно, не то, что вы действительно хотите. – Jonas

+0

Да, к сожалению, я не хочу, чтобы пользователь нажимал эти клавиши. Я не думаю, что есть способ программно сделать ctrl + c ... – leonhart88

ответ

2

Независимо от того, является ли это петлей или нет, вы будете вынуждены вставить 'контрольные точки' в свой код, где выполнение программы должно продолжаться или останавливаться. Глядя на functions, команда return возобновит выполнение в нужном месте.

Все, что вы можете выбрать, это «метод» распространения «Stop Trigger», используя Events and Listeners или решение, предоставленное The MathWorks.

+0

Спасибо ... это то, что я думал, но я надеялся, что будет какой-то способ получить дескриптор приостановленного обратного вызова и каким-то образом его прекратить. Читая документацию MATLAB о прерываниях, явным образом говорю, что это невозможно. Я предположил, что постараюсь разбить мой код и вставить контрольные точки в наиболее подходящие области ... спасибо! – leonhart88

Смежные вопросы