timer class

Создайте объект для планирования выполнения команд MATLAB

Описание

Использование timer объект для планирования выполнения MATLAB® один или несколько команд. Если вы планируете выполнение таймера несколько раз, можно задать время между выполнениями и способ обработки конфликтов в очереди.

The timer объект использует функции обратного вызова для выполнения команд. Функции обратного вызова выполняют код во время некоторого события. Для timer объект, можно задать функцию обратного вызова как указатель на функцию или как вектор символов. Если функция обратного вызова является вектором символов, MATLAB оценивает ее как исполняемый код. Объект-таймер поддерживает функции обратного вызова, когда таймер запускается (StartFcn), выполняет (TimerFcn), упоры (StopFcn), или встречается с ошибкой (ErrorFcn).

Примечание

The timer объект удовлетворяет ограничениям вашего оборудования, операционной системы и программного обеспечения. Избегайте использования объектов-таймеров для приложений реального времени.

Конструкция

t = timer создает пустой timer объект для планирования выполнения команд MATLAB. Ошибка возникает, если таймер запускается и TimerFcn не определен.

t = timer(Name,Value) создает timer объект с дополнительными опциями, которые вы задаете используя один или несколько Name,Value аргументы в виде пар.

Входные параметры

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Имя аргумента, Name, соответствует timer имя свойства. В конструкторе значения свойств задаются с помощью Name,Value аргументы в виде пар.

'BusyMode'

Вектор символов или строковый скаляр, который указывает на действие, предпринятое при выполнении таймера TimerFcn до завершения предыдущего выполнения TimerFcn. Когда Running='on', BusyMode только для чтения. В этой таблице перечислены режимы занятости.

BusyMode Значения

Поведение, если очередь пуста

Поведение, если очередь не пуста

Примечания

'drop'

Добавляет задачу в очередь

Отбрасывает задачу

Возможное пропуск TimerFcn вызовы

'error'

Добавляет задачу в очередь

Выполняет задачу; выдает ошибку, заданную ErrorFcn; останавливает таймер

Останавливает таймер после выполнения задачи в очереди выполнения

'queue'

Добавляет задачу в очередь

Ожидает удаления очереди, а затем входит в задачу в очереди

Настраивает Period свойство для управления задачами в очереди выполнения

Для получения дополнительной информации см. Обработку конфликтов очереди таймера.

По умолчанию: 'drop'

'ErrorFcn'

Вектор символов, строковый скаляр, указатель на функцию или массив ячеек, определяющий функцию, которую таймер выполняет, когда возникает ошибка. Если есть ошибка, эта функция выполняет, а затем вызывает StopFcn.

  • Если вы задаете это свойство с помощью вектора символов или строкового скаляра, когда MATLAB выполняет коллбэк, которую он оценивает код MATLAB, содержащийся в векторе символов.

  • Если вы задаете это свойство с помощью указателя на функцию, когда MATLAB выполняет коллбэк, он передает timer объект и структура события для функции обратного вызова. Структура события содержит тип события в Type поле и время события в Data поле.

  • Если ваша функция обратного вызова принимает аргументы в дополнение к timer object и данные о событиях задайте это свойство как массив ячеек, содержащий указатель на функцию и дополнительные аргументы.

Для получения дополнительной информации см. Раздел «Функции обратного вызова таймера»

'ExecutionMode'

Вектор символов или строковый скаляр, который определяет, как timer планирование событий таймера объекта. Когда Running='on', ExecutionMode только для чтения. В этой таблице представлены режимы выполнения.

Режим выполнения

Временные Period Начальная точка

'singleShot'

В этом режиме функция обратного вызова таймера выполняется только один раз. Поэтому Period свойство не влияет. Это режим выполнения по умолчанию.

'fixedRate'

Запускается сразу после добавления функции обратного вызова таймера в очередь выполнения MATLAB

'fixedDelay'

Запускается, когда коллбэк функции таймера перезапускает выполнение после временной задержки из-за задержек в очереди выполнения MATLAB

'fixedSpacing'

Запускается, когда функция обратного вызова таймера заканчивает выполняться.

  • 'singleShot' является одним режимом выполнения для timer класс, и является значением по умолчанию.

  • 'fixedDelay', 'fixedRate', и 'fixedSpacing' являются тремя поддерживаемыми режимами мультирежима выполнения. Эти режимы определяют начальную точку Period свойство. The Period свойство задает время между выполнениями, которое остается неизменным. Только точка, с которой начинается выполнение, отличается.

По умолчанию: 'singleShot'

'Name'

Вектор символов или строковый скаляр, представляющий timer имя.

По умолчанию: 'timer-i', где i - число, указывающее на ith объекта-таймера создали этот сеанс. Чтобы сбросить i чтобы 1, выполните clear classes команда.

'ObjectVisibility'

Вектор символов или строковый скаляр с возможными значениями 'on' или 'off', что предоставляет вам способ препятствовать доступу конечного пользователя к объектам-таймерам, созданным вашим приложением. The timerfind функция не возвращает объект, чей ObjectVisibility для свойства задано значение 'off'. Объекты, которые не видны, все еще действительны. Чтобы получить список всех объектов-таймеров в памяти, включая невидимые таковые, используйте timerfindall функция.

По умолчанию: 'on'

'Period'

Число, больше 0,001, которое задает задержку в секундах между выполнениями TimerFcn. Для использования таймера Period, вы должны задать ExecutionMode и TasksToExecute чтобы запланировать несколько объект-таймер коллбэка событий.

Значение по умолчанию: 1.0

'StartDelay'

Число, больше или равное 0, которое задает задержку в секундах между началом таймера и первым выполнением функции, указанной в TimerFcn. Когда Running = 'on', StartDelay только для чтения.

По умолчанию: 0

'StartFcn'

Вектор символов, строковый скаляр, указатель на функцию или массив ячеек, определяющий функцию, которая выполняется, когда таймер запускается.

  • Если вы задаете это свойство с помощью вектора символов или строкового скаляра, когда MATLAB выполняет коллбэк, которую он оценивает код MATLAB, содержащийся в векторе символов.

  • Если вы задаете это свойство с помощью указателя на функцию, когда MATLAB выполняет коллбэк, он передает timer объект и структура события для функции обратного вызова. Структура события содержит тип события в Type поле и время события в Data поле.

  • Если ваша функция обратного вызова принимает аргументы в дополнение к timer object и данные о событиях задайте это свойство как массив ячеек, содержащий указатель на функцию и дополнительные аргументы.

Для получения дополнительной информации см. Раздел «Функции обратного вызова таймера»

'StopFcn'

Вектор символов, строковый скаляр, указатель на функцию или массив ячеек, определяющий функцию, которая выполняется, когда таймер останавливается.

  • Если вы задаете это свойство с помощью вектора символов или строкового скаляра, когда MATLAB выполняет коллбэк, которую он оценивает код MATLAB, содержащийся в векторе символов.

  • Если вы задаете это свойство с помощью указателя на функцию, когда MATLAB выполняет коллбэк, он передает timer объект и структура события для функции обратного вызова. Структура события содержит тип события в Type поле и время события в Data поле.

  • Если ваша функция обратного вызова принимает аргументы в дополнение к timer object и данные о событиях задайте это свойство как массив ячеек, содержащий указатель на функцию и дополнительные аргументы.

Для получения дополнительной информации см. Раздел «Функции обратного вызова таймера»

Таймер останавливается, когда

  • Вы вызываете таймер stop способ.

  • Таймер завершает выполнение TimerFcn. Другими словами, значение TasksExecuted достигает предела, установленного TasksToExecute.

  • Возникает ошибка. The ErrorFcn сначала вызывается коллбэк, затем StopFcn коллбэк.

Можно использовать StopFcn для определения действий очистки, таких как удаление объекта-таймера из памяти.

'Tag'

Вектор символов или строковый скаляр, который представляет метку для объекта.

'TasksToExecute'

Число, больше 0, что указывает на количество раз, когда объект-таймер выполняет TimerFcn коллбэк. Используйте TasksToExecute свойство для задания количества выполнений. Как использовать TasksToExecute, вы должны задать ExecutionMode для планирования нескольких событий коллбэка таймера.

По умолчанию: Inf

'TimerFcn'

Вектор символов, строковый скаляр, указатель на функцию или массив ячеек, определяющий функцию обратного вызова таймера. Перед запуском таймера необходимо задать это свойство.

  • Если вы задаете это свойство с помощью вектора символов или строкового скаляра, когда MATLAB выполняет коллбэк, которую он оценивает код MATLAB, содержащийся в векторе символов.

  • Если вы задаете это свойство с помощью указателя на функцию, когда MATLAB выполняет коллбэк, он передает timer объект и структура события для функции обратного вызова. Структура события содержит тип события в Type поле и время события в Data поле.

  • Если ваша функция обратного вызова принимает аргументы в дополнение к timer object и данные о событиях задайте это свойство как массив ячеек, содержащий указатель на функцию и дополнительные аргументы.

Для получения дополнительной информации см. Раздел «Функции обратного вызова таймера»

'UserData'

Типовое поле для данных, которые вы хотите добавить к объекту.

Свойства

AveragePeriod

Среднее время в секундах между TimerFcn выполняется с момента запуска таймера. Значение NaN пока таймер не выполнит два коллбэков таймера.

InstantPeriod

Время в секундах между двумя последними выполнение TimerFcn. Значение NaN пока таймер не выполнит два коллбэков таймера.

Running

Вектор символов, заданный как 'off' или 'on', что указывает, является ли таймер выполняющегося в данного момента функциями обратного вызова.

TasksExecuted

Количество вызовов таймера TimerFcn с момента запуска таймера.

Type

Вектор символов, который идентифицирует тип объекта.

Методы

удалитьУдалите объект-таймер из памяти
добратьсяЗапросите значения свойств для объекта-таймера
isvalidОпределите объект-таймер валидности
наборУстановите значения свойств для объекта-таймера
начатьНачните объект-таймер
startatПланируйте запуск таймера в указанное время
стопСтоп- объект-таймер
timerfindПоиск объекта-таймера
timerfindallНайдите объект-таймер, независимо от видимости
подождитеБлокируйте командную строку до тех пор, пока таймер не перестанет запускаться

Копировать семантику

Указатель. Чтобы узнать, как классы handle влияют на операции копирования, см. раздел «Копирование объектов».

Примеры

свернуть все

Отображение сообщения с помощью анонимной функции в качестве функции обратного вызова. Важно отметить, что первые два аргумента, которые передает функция обратного вызова, являются указателем на объект-таймер и структуру события. Даже если функция не использует эти аргументы, определение функции требует их.

Подождите 3 секунд, а затем отобразить сообщение «Прошло 3 секунды».

t = timer;
t.StartDelay = 3;
t.TimerFcn = @(myTimerObj, thisEvent)disp('3 seconds have elapsed');
start(t)
3 seconds have elapsed

Предположим, что функция не требует таймера или объекта события. Используйте тильду (~) оператор, чтобы игнорировать входы.

t.TimerFcn = @(~,~) disp('3 seconds have elapsed');
start(t)
3 seconds have elapsed

Удалите объект-таймер.

delete(t)

Отображение события и выхода, когда таймер запускается, запускается и останавливается. Функция обратного вызова таймера будет выполняться 3 раза с 2 секундами между вызовами. Первые два аргумента, которые передает функция обратного вызова, являются указателем на объект-таймер и структуру события. Структура события содержит два поля: Type является вектор символов, которая идентифицирует тип события, которое вызвало коллбэк, и Data - структура, содержащая временной вектор даты, когда произошло событие.

t = timer;
t.StartFcn = @(~,thisEvent)disp([thisEvent.Type ' executed '...
    datestr(thisEvent.Data.time,'dd-mmm-yyyy HH:MM:SS.FFF')]);
t.TimerFcn = @(~,thisEvent)disp([thisEvent.Type ' executed '...
     datestr(thisEvent.Data.time,'dd-mmm-yyyy HH:MM:SS.FFF')]);
t.StopFcn = @(~,thisEvent)disp([thisEvent.Type ' executed '...
    datestr(thisEvent.Data.time,'dd-mmm-yyyy HH:MM:SS.FFF')]);
t.Period = 2;
t.TasksToExecute = 3;
t.ExecutionMode = 'fixedRate';
start(t)
StartFcn executed 14-Mar-2013 09:08:50.865
TimerFcn executed 14-Mar-2013 09:08:50.865
TimerFcn executed 14-Mar-2013 09:08:52.865
TimerFcn executed 14-Mar-2013 09:08:54.866
StopFcn executed 14-Mar-2013 09:08:54.869

Удалите объект-таймер.

delete(t)

Создайте объект-таймер, чтобы напомнить себе, что принимайте 30-секундные эргономические пропуски каждые 10 минуты в течение 8 часов.

Создайте функцию в файле с именем createErgoTimer.m который возвращает объект-таймер. Иметь этот файл включает три локальные функции для обработки запуска, выполнения и остановки таймера.

function t = createErgoTimer()
secondsBreak = 30;
secondsBreakInterval = 600;
secondsPerHour = 60^2;
secondsWorkTime = 8*secondsPerHour;

t = timer;
t.UserData = secondsBreak;
t.StartFcn = @ergoTimerStart;
t.TimerFcn = @takeBreak;
t.StopFcn = @ergoTimerCleanup;
t.Period = secondsBreakInterval+secondsBreak;
t.StartDelay = t.Period-secondsBreak;
t.TasksToExecute = ceil(secondsWorkTime/t.Period);
t.ExecutionMode = 'fixedSpacing';
end 

Использование StartDelay позволяет таймеру запускаться, не указывая вам немедленно делать пропуск. Установите режим выполнения равным 'fixedSpacing' так что 10 минуты и 30 секунд (t.Period) проходит после завершения TimerFcn выполнение. Это позволяет растягиваться на 30 секунды до начала следующего 10 минутный интервал.

В createErgoTimer.m Файл добавьте локальную функцию, чтобы обработать задачи, связанные с запуском таймера. По умолчанию в timer объект переходит сам и данные о событиях к функции обратного вызова. Функция игнорирует данные о событиях.

function ergoTimerStart(mTimer,~)
secondsPerMinute = 60;
secondsPerHour = 60*secondsPerMinute;
str1 = 'Starting Ergonomic Break Timer.  ';
str2 = sprintf('For the next %d hours you will be notified',...
    round(mTimer.TasksToExecute*(mTimer.Period + ...
    mTimer.UserData)/secondsPerHour));
str3 = sprintf(' to take a %d second break every %d minutes.',...
    mTimer.UserData, (mTimer.Period - ...
    mTimer.UserData)/secondsPerMinute);
disp([str1 str2 str3])
end

Добавьте локальную функцию для обработки задач, связанных с выполнением таймера. The TimerFcn коллбэк должен сказать вам взять 30 второй пропуск.

function takeBreak(mTimer,~)
disp('Take a 30 second break.')
end

Добавьте локальную функцию, чтобы обработать задачи, связанные с остановкой таймера.

function ergoTimerCleanup(mTimer,~)
disp('Stopping Ergonomic Break Timer.')
delete(mTimer)
end

Удаление объекта-таймера удаляет его из памяти.

Из командной строки вызовите createErgoTimer функция для создания и запуска таймера.

t = createErgoTimer;
start(t)
Starting Ergonomic Break Timer.  For the next 8 hours you will be notified to take a 30 second break every 10 minutes.

Каждый 10 минуты, вам напомнят, чтобы взять 30 второй пропуск.

Take a break.

Можно оставить таймер работающим на 8 часов или остановить его вручную. Напомним, что вы включили задачу удаления таймера из памяти в StopFcn коллбэк.

stop(t)
Stopping Ergonomic Break Timer.

Совет

  • Чтобы принудительно выполнить функции обратного вызова в очереди событий, включите вызов в drawnow функция в вашем коде. The drawnow функция очищает очередь событий.

Представлено до R2006a