Решение, которое я сейчас использую, заключается в добавлении короткой паузы между остановкой и удалением.
Это своего рода патч, и я не уверен, сработает ли он для вас.
Мой код выглядит следующим образом:
all_timers = timerfindall();
if (~isempty(all_timers))
stop(all_timers);
pause(0.1); % <--- Add a short pause between stop and delete
for i = 1:length(all_timers)
delete(all_timers(i));
end
end
Приведенный выше код останавливает и удаляет все таймеры.
Я удаляю все, потому что в случаях, когда программа завершает работу перед удалением таймера(как отладка), «лишние» объекты таймеров остаются неосуществленными.
Я не уверен, почему пауза предотвращает сбой.
Я предполагаю, что пауза разрешает «переключение контекста» и позволяет обратный вызов таймераЗавершите выполнение функции перед удалением таймера.