이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

timer 클래스

MATLAB 명령의 실행을 예약하는 객체 만들기

설명

timer 객체를 사용하여 MATLAB® 명령을 한 번 또는 여러 번 실행하도록 예약합니다. 여러 번 실행하도록 타이머를 예약하는 경우, 실행 간격과 대기 충돌을 처리하는 방법을 정의할 수 있습니다.

timer 객체는 콜백 함수를 사용하여 명령을 실행합니다. 콜백 함수는 일부 이벤트 도중 코드를 실행합니다. timer 객체의 경우, 콜백 함수를 함수 핸들 또는 문자형 벡터로 지정할 수 있습니다. 콜백 함수가 문자형 벡터이면 MATLAB은 콜백 함수가 실행 가능한 코드인 것으로 간주하고 실행합니다. 타이머가 시작(StartFcn), 실행(TimerFcn) 또는 중지(StopFcn)되거나 타이머에서 오류가 발생(ErrorFcn)할 경우 timer 객체는 콜백 함수를 지원합니다.

참고

timer 객체는 하드웨어, 운영 체제, 소프트웨어가 갖는 제한의 영향을 받습니다. 실시간 응용 프로그램에는 timer 객체를 사용하지 마십시오.

생성

t = timer는 빈 timer 객체를 만들어 MATLAB 명령 실행을 예약합니다. TimerFcn이 정의되어 있지 않은 상태에서 타이머가 시작되면 오류가 발생합니다.

t = timer(Name,Value)는 하나 이상의 Name,Value 쌍의 인수를 사용하여 지정한 추가 옵션으로 timer 객체를 만듭니다.

입력 인수

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

인수 이름 Nametimer 속성 이름에 해당합니다. 생성자에서 속성값은 Name,Value 쌍의 인수를 사용하여 지정됩니다.

'BusyMode'

문자형 벡터 또는 string형 스칼라로, 이전 TimerFcn 실행이 완료되기 전에 타이머가 TimerFcn을 실행해야 하는 경우에 수행되는 동작을 나타냅니다. Running='on'일 때 BusyMode는 읽기 전용입니다. 아래 표에는 사용 중 모드(busy mode)가 요약되어 있습니다.

BusyMode

대기열이 비어 있는 경우의 동작

대기열이 비어 있지 않은 경우의 동작

참고

'drop'

대기열에 작업 추가

작업 삭제

TimerFcn 호출 건너뛰기 가능

'error'

대기열에 작업 추가

작업 완료, ErrorFcn으로 지정된 오류 발생, 타이머 중지

실행 대기열의 작업 완료 후 타이머 중지

'queue'

대기열에 작업 추가

대기열이 지워질 때까지 대기한 후 대기열에 작업 입력

Period 속성을 조정하여 실행 대기열의 작업 관리

자세한 내용은 타이머 대기 충돌 처리하기 항목을 참조하십시오.

디폴트 값: 'drop'

'ErrorFcn'

문자형 벡터, string형 스칼라, 함수 핸들 또는 셀형 배열로, 오류가 발생할 경우 타이머가 실행하는 함수를 정의합니다. 오류가 있는 경우 이 함수가 실행되고, 실행을 완료하면 이 함수는 StopFcn을 호출합니다.

  • 문자형 벡터 또는 string형 스칼라를 사용하여 이 속성을 지정하면, MATLAB에서는 콜백을 실행할 때 문자형 벡터에 포함된 MATLAB 코드를 실행합니다.

  • 함수 핸들을 사용하여 이 속성을 지정하면, MATLAB에서는 콜백을 실행할 때 timer 객체와 이벤트 구조체를 콜백 함수에 전달합니다. 이벤트 구조체는 Type 필드에 이벤트 유형을, Data 필드에 이벤트 시간을 포함합니다.

  • 콜백 함수가 timer 객체와 이벤트 데이터 외의 인수를 받는 경우, 함수 핸들과 추가 인수가 포함된 셀형 배열로 이 속성을 지정하십시오.

자세한 내용은 타이머 콜백 함수 항목을 참조하십시오.

'ExecutionMode'

문자형 벡터 또는 string형 스칼라로, timer 객체가 timer 이벤트를 예약하는 방법을 정의합니다. Running='on'이면 ExecutionMode는 읽기 전용입니다. 아래 표에는 실행 모드가 요약되어 있습니다.

실행 모드

시간 Period 시작점

'singleShot'

이 모드에서는 타이머 콜백 함수가 한 번만 실행됩니다. 따라서 Period 속성은 영향을 미치지 않습니다. 이는 디폴트 실행 모드입니다.

'fixedRate'

타이머 콜백 함수가 MATLAB 실행 대기열에 추가되면 바로 시작됩니다.

'fixedDelay'

MATLAB 실행 대기열의 지연으로 인한 시간차 이후에 타이머 콜백 함수가 실행을 다시 시작하면 시작됩니다.

'fixedSpacing'

타이머 콜백 함수가 실행을 마치면 시작됩니다.

  • 'singleShot'timer 클래스에 대한 단일 실행 모드로, 디폴트 값입니다.

  • 'fixedDelay', 'fixedRate', 'fixedSpacing'은 지원되는 세 가지 다중 실행 모드입니다. 이 모드들은 Period 속성의 시작점을 정의합니다. Period 속성은 동일하게 유지되는 실행 간격을 지정합니다. 실행 시작점만 다릅니다.

디폴트 값: 'singleShot'

'Name'

timer 이름을 나타내는 문자형 벡터 또는 string형 스칼라입니다.

디폴트 값: 'timer-i'입니다. 여기서 i는 이 세션을 생성한 i번째 timer 객체를 나타내는 숫자입니다. i를 1로 재설정하려면 clear classes 명령을 실행하십시오.

'ObjectVisibility'

'on' 값 또는 'off' 값을 가질 수 있는 문자형 벡터 또는 string형 스칼라로, 이 속성을 사용하면 응용 프로그램에서 생성한 timer 객체에 최종 사용자가 액세스하지 않도록 할 수 있습니다. timerfind 함수는 ObjectVisibility 속성이 'off'로 설정된 객체를 반환하지 않습니다. 표시되지 않는 객체이지만 여전히 유효합니다. 표시되지 않는 timer 객체를 비롯하여 모든 timer 객체의 목록을 메모리에서 검색하려면 timerfindall 함수를 사용하십시오.

디폴트 값: 'on'

'Period'

0.001보다 큰 숫자로, TimerFcn 실행 간 지연 시간(단위: 초)을 지정합니다. 타이머에서 Period를 사용할 수 있으려면, 여러 개의 timer 객체 콜백 이벤트를 예약하도록 ExecutionModeTasksToExecute를 설정해야 합니다.

디폴트 값: 1.0

'StartDelay'

0보다 크거나 같은 숫자로, 타이머 시작부터 TimerFcn에 지정된 함수의 첫 번째 실행까지의 지연 시간(단위: 초)을 지정합니다. Running = 'on'이면 StartDelay는 읽기 전용입니다.

디폴트 값: 0

'StartFcn'

문자형 벡터, string형 스칼라, 함수 핸들 또는 셀형 배열로, 타이머가 시작될 때 실행되는 함수를 정의합니다.

  • 문자형 벡터 또는 string형 스칼라를 사용하여 이 속성을 지정하면, MATLAB에서는 콜백을 실행할 때 문자형 벡터에 포함된 MATLAB 코드를 실행합니다.

  • 함수 핸들을 사용하여 이 속성을 지정하면, MATLAB에서는 콜백을 실행할 때 timer 객체와 이벤트 구조체를 콜백 함수에 전달합니다. 이벤트 구조체는 Type 필드에 이벤트 유형을, Data 필드에 이벤트 시간을 포함합니다.

  • 콜백 함수가 timer 객체와 이벤트 데이터 외의 인수를 받는 경우, 함수 핸들과 추가 인수가 포함된 셀형 배열로 이 속성을 지정하십시오.

자세한 내용은 타이머 콜백 함수 항목을 참조하십시오.

'StopFcn'

문자형 벡터, string형 스칼라, 함수 핸들 또는 셀형 배열로, 타이머가 중지될 때 실행되는 함수를 정의합니다.

  • 문자형 벡터 또는 string형 스칼라를 사용하여 이 속성을 지정하면, MATLAB에서는 콜백을 실행할 때 문자형 벡터에 포함된 MATLAB 코드를 실행합니다.

  • 함수 핸들을 사용하여 이 속성을 지정하면, MATLAB에서는 콜백을 실행할 때 timer 객체와 이벤트 구조체를 콜백 함수에 전달합니다. 이벤트 구조체는 Type 필드에 이벤트 유형을, Data 필드에 이벤트 시간을 포함합니다.

  • 콜백 함수가 timer 객체와 이벤트 데이터 외의 인수를 받는 경우, 함수 핸들과 추가 인수가 포함된 셀형 배열로 이 속성을 지정하십시오.

자세한 내용은 타이머 콜백 함수 항목을 참조하십시오.

타이머는 다음과 같은 경우에 중지됩니다.

  • 타이머의 stop 메서드를 호출하는 경우.

  • 타이머가 TimerFcn 실행을 완료하는 경우. 즉, TasksExecuted 값이 TasksToExecute로 설정된 제한값에 도달하는 경우.

  • 오류가 발생하는 경우. ErrorFcn 콜백이 먼저 호출된 후 StopFcn 콜백이 호출되는 경우.

StopFcn을 사용하여 정리 동작(예: 메모리에서 timer 객체 삭제)을 정의할 수 있습니다.

'Tag'

문자형 벡터 또는 string형 스칼라로, 객체의 레이블을 나타냅니다.

'TasksToExecute'

0보다 큰 숫자로, timer 객체가 TimerFcn 콜백을 실행할 횟수를 나타냅니다. TasksToExecute 속성을 사용하여 실행 횟수를 설정합니다. TasksToExecute를 사용하려면 여러 개의 타이머 콜백 이벤트를 예약하도록 ExecutionMode를 설정해야 합니다.

디폴트 값: Inf

'TimerFcn'

문자형 벡터, string형 스칼라, 함수 핸들 또는 셀형 배열로, 타이머 콜백 함수를 정의합니다. 타이머를 시작하려면 먼저 이 속성을 정의해야 합니다.

  • 문자형 벡터 또는 string형 스칼라를 사용하여 이 속성을 지정하면, MATLAB에서는 콜백을 실행할 때 문자형 벡터에 포함된 MATLAB 코드를 실행합니다.

  • 함수 핸들을 사용하여 이 속성을 지정하면, MATLAB에서는 콜백을 실행할 때 timer 객체와 이벤트 구조체를 콜백 함수에 전달합니다. 이벤트 구조체는 Type 필드에 이벤트 유형을, Data 필드에 이벤트 시간을 포함합니다.

  • 콜백 함수가 timer 객체와 이벤트 데이터 외의 인수를 받는 경우, 함수 핸들과 추가 인수가 포함된 셀형 배열로 이 속성을 지정하십시오.

자세한 내용은 타이머 콜백 함수 항목을 참조하십시오.

'UserData'

사용자가 객체에 추가하려는 데이터에 대한 일반 필드입니다.

속성

AveragePeriod

타이머가 시작된 후 TimerFcn 실행 간 평균 시간(단위: 초)입니다. 타이머가 2개의 타이머 콜백을 실행할 때까지 값은 NaN입니다.

InstantPeriod

TimerFcn의 마지막 2번 실행 간 시간(단위: 초)입니다. 타이머가 2개의 타이머 콜백을 실행할 때까지 값은 NaN입니다.

Running

'off' 또는 'on'으로 정의되는 문자형 벡터로, 타이머가 현재 콜백 함수를 실행 중인지 여부를 나타냅니다.

TasksExecuted

타이머가 시작된 후 TimerFcn을 호출한 횟수입니다.

Type

문자형 벡터로, 객체 유형을 식별합니다.

메서드

deleteRemove timer object from memory
getQuery property values for timer object
isvalidDetermine timer object validity
setSet property values for timer object
startStart timer object
startatSchedule timer to fire at specified time
stopStop timer object
timerfindFind timer object
timerfindallFind timer object, regardless of visibility
waitBlock command prompt until timer stops running

복사 의미 체계

핸들. 핸들 클래스가 복사 작업에 미치는 영향에 대한 내용은 객체 복사 항목을 참조하십시오.

예제

모두 축소

익명 함수를 콜백 함수로 사용하여 메시지를 표시합니다. 콜백 함수가 전달하는 처음 2개 인수가 timer 객체에 대한 핸들과 이벤트 구조체라는 점을 유의하십시오. 함수에서 이 인수들을 사용하지 않더라도 함수를 정의하는 데 필요합니다.

3초 후 '3 seconds have elapsed'라는 메시지가 표시됩니다.

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

함수에 timer 객체나 이벤트 객체가 필요하지 않다고 가정하겠습니다. 물결표(~) 연산자를 사용하여 입력값을 무시합니다.

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

timer 객체를 삭제합니다.

delete(t)

타이머가 시작될 때, timer 이벤트가 발생할 때, 타이머가 중지될 때, 이벤트와 날짜/시간 출력값을 표시합니다. 타이머 콜백 함수는 호출 간격을 2초로 하여 3번 실행됩니다. 콜백 함수가 전달하는 처음 두 개의 인수는 timer 객체에 대한 핸들과 이벤트 구조체입니다. 이벤트 구조체에는 두 개의 필드가 있습니다. 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

timer 객체를 삭제합니다.

delete(t)

8시간 동안 10분마다 30초간 휴식을 취하도록 알려주는 timer 객체를 만듭니다.

createErgoTimer.m 파일에 timer 객체를 반환하는 함수를 생성합니다. 이 파일에 타이머 시작, 실행, 중지 작업을 처리할 로컬 함수 세 개를 포함시킵니다.

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를 사용하면 타이머가 사용자에게 바로 휴식을 취하도록 지시하지 않고 시작할 수 있습니다. TimerFcn 실행 완료 후 1030초(t.Period)가 경과하도록 실행 모드를 'fixedSpacing'으로 설정합니다. 이렇게 하면 다음 10분 구간이 시작되기 전에 30초 동안 스트레칭을 할 수 있습니다.

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

timer 객체를 삭제하면 메모리에서 제거됩니다.

명령줄에서 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 이전에 개발됨