класс таймера

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

Описание

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

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

Примечание

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

Конструкция

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

t = timer(Name,Value) создает объект timer с дополнительными опциями, что вы задаете использование одного или нескольких аргументов пары 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 и данным о событиях, задайте это свойство как массив ячеек, содержащий указатель на функцию и дополнительные аргументы.

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

'ExecutionMode'

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

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

Время стартовая точка Period

'singleShot'

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

'fixedRate'

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

'fixedDelay'

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

'fixedSpacing'

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

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

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

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

'Name'

Вектор символов или скаляр строки представление имени timer.

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

'ObjectVisibility'

Скаляр вектора символов или строки с возможными значениями 'on' или 'off', который обеспечивает способ для вас препятствовать доступу конечных пользователей к объектам - таймерам ваше приложение, создает. Функция 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 и данным о событиях, задайте это свойство как массив ячеек, содержащий указатель на функцию и дополнительные аргументы.

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

'StopFcn'

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

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

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

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

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

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

  • Вы вызываете таймер метод stop.

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

  • Ошибка происходит. Коллбэк ErrorFcn называется сначала, сопровождается коллбэком StopFcn.

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

'Tag'

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

'TasksToExecute'

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

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

'TimerFcn'

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

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

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

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

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

'UserData'

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

Свойства

AveragePeriod

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

InstantPeriod

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

Running

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

TasksExecuted

Число раз таймер под названием TimerFcn начиная с запущенного таймера.

Type

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

Методы

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

Примеры

свернуть все

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

Ожидайте секунды 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

Добавьте локальную функцию, чтобы справиться с задачами, сопоставленными с подписанием таймера. Коллбэк 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 в вашем коде. Функция drawnow сбрасывает очередь событий.

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