2014-07-07 14 views
1

아래 프로그램에는 timer 개체 정의와 그 뒤에 시작 명령이 나와 있습니다. 그런 다음 프로그램은 다른 명령문을 계속 실행합니다.Callback of Matlab Timer

제 질문은 0.01 초 후에 정확하게 호출 할 것인가 아니면 타이머 콜백 함수가 실행되도록 for 루프가 완료 될 때까지 기다릴 것입니까?

% My timer object 
t = timer('TimerFcn',@(x,y)G2(z), 'StartDelay',0.01); 
start(t); 

% Other program statements 
for i=1:m 
    ... 
end 
+0

나는 [이 질문에] 당신을 참조 할 것이다 (http://www.mathworks.com/matlabcentral/answers/10394-timer-and-interruptible-off-button-callback-priority-preemption) MATLAB Answers를 참조하십시오. 또한 거기에 다른 날에 내가 생각하는 그래서 여기에 관련이있다 : http://stackoverflow.com/q/24368424/97160 – Amro

답변

0

결론은 MATLAB이 효과적으로 단일 스레드라는 것입니다. 따라서 긴 작업이 현재 실행 중이면 타이머 콜백이 실행될 기회를 얻지 못하며 타이머 객체 속성 (약 BusyMode을 읽음)에 따라 MATLAB이 결국 처음 수행 할 대기열에 이벤트를 추가합니다 기회 .. 내가 이해에서

(이것은 내 자신의 추측이다), MATLAB timers이 사이의 문에서 실행 을 중단 할 수 있지만하지 긴 하나 중. 도착

참고 : 지정된 실행 시간과 실제

그래서 이론적으로 ...


documentation은 0.01 초 후에 실행해야하지만, 보장이없는 다음을 말한다 타이머 개체가 MATLAB 단일 스레드 실행 환경에서 작동하기 때문에 타이머의 실행이 달라질 수 있습니다. 이 시간 지연의 길이는 에 따라 달라지며 MATLAB이 수행하는 다른 처리는 무엇입니까. 이벤트 큐의 콜백 함수를 강제 실행하려면 코드에 drawnow 함수에 대한 호출을 포함시킵니다. drawnow 함수는 대기열 이벤트를 플러시합니다.

또 다른 doc page에이 주석이 :

참고 : 콜백은 그림을 업데이트하는 등의 CPU를 많이 사용하는 작업을 포함하는 경우 콜백 함수의 실행이 지연 될 수 있습니다.