Сбой MATLAB при удалении объекта Timer - PullRequest
2 голосов
/ 19 июня 2019

Я создал два объекта таймера в MATLAB с TasksToExecute, равным inf.Я запускаю эти два таймера методом запуска, и все работает хорошо.Я хочу удалить доступные объекты таймера после того, как я нажму ctrl + c в командном окне (или даже в скрипте main.m до запуска таймеров):

  1. stop (timerfind) --->это хорошо работает
  2. delete (timerfind) ---> Сбой MATLAB

Проблема: когда я хочу удалить объекты таймера, происходит сбой MATLAB!

Также, когда я хочу выполнить команду «очистить все» в моем коде, происходит сбой MATLAB!

Кто-нибудь знает, что происходит?

Настройка: Windows 10, MATLAB 2017b

Ответы [ 2 ]

2 голосов
/ 19 июня 2019

Решение, которое я сейчас использую, заключается в добавлении короткой паузы между остановкой и удалением.

Это своего рода патч, и я не уверен, сработает ли он для вас.

Мой код выглядит следующим образом:

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

Приведенный выше код останавливает и удаляет все таймеры.
Я удаляю все, потому что в случаях, когда программа завершает работу перед удалением таймера(как отладка), «лишние» объекты таймеров остаются неосуществленными.

Я не уверен, почему пауза предотвращает сбой.
Я предполагаю, что пауза разрешает «переключение контекста» и позволяет обратный вызов таймераЗавершите выполнение функции перед удалением таймера.

0 голосов
/ 20 июня 2019

Только что открыл программу MATLAB с «Запуск от имени администратора» и проблема решена! Возможно, для удаления объектов нужны права администратора!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...