У меня всегда была такая же проблема, и мне очень хотелось бы знать, есть ли у нее решение. Если я что-то вроде:Эффективно размыкать петлю при выходе фигуры Matlab
figure
axis([-2 2 -2 2])
a=1;
h=rectangle('Position',[1,0,0.1,0.1]);
t=0;
while a==1
if ishandle(h)
t=t+0.1;
pause(0.001)
x=0.2*cos(t);
y=0.2*sin(t);
set(h, 'Position', [x, y,0.1,0.1])
else
break
end
end
Я всегда получаю какие-то ошибки, когда фигура вышла с кнопкой х:
Error using handle.handle/set
Invalid or deleted object.
Это не удивительно, потому что если я выхожу в то время как его чтения цикл, он все равно должен пройти через него, прежде чем он поймет, что он должен ломаться. Один из способов решения ошибок состоит в том, чтобы добавить «if ishandle (h)» везде, где я использую что-то, что используется вне цикла. Тем не менее, это не только спам моего кода с if/end почти в каждой строке, но и очень медленно выйти из кода. Это большая проблема, я не против большой ошибки или спама моего кода, но каждый раз, когда я ухожу, мне нужно ждать дополнительные 5 секунд, когда Matlab зависает по какой-то причине.
Это нормально? Есть ли более эффективный способ закрыть фигуру? Я думаю, что должен быть слушатель, когда нажата кнопка x на фигуре, которая просто остановит все ...
Это очень расстраивает и сводит меня с ума, любая помощь будет оценена по достоинству.
Спасибо,
Майк
Я использую try set (h, ..) catch break end для этого, он отлично работает, но его можно считать уродливым. То, что также помогает, заключается в том, чтобы положить только инструкцию set после ishandle(), а остальное - до – MeMyselfAndI