원인은 업데이트 윈도우와 자녀를내는 기능을 가진 플러싱 이벤트 큐 및 시스템 이벤트 큐를 플러시합니다. 들어오는 이벤트 (예 : 마우스 또는 키 이벤트)로 생성 된 모든 콜백은
drawnow
이 반환되기 전에 전달됩니다.
내가 다음 스크립트가 있습니다 장소에 drawnow
와
clear all;
clc;
t = timer;
set(t, 'Period', 1);
set(t, 'ExecutionMode', 'fixedSpacing');
set(t, 'TimerFcn', @(event, data) disp('Timer rollover!'));
start(t);
while(1)
%# do something interesting
drawnow;
end
를, 타이머 이벤트는 매초마다 발생합니다. 루프가 없으면 while
루프가 "차단"되기 때문에 콜백 함수가 발생하지 않습니다.
내 질문 :
1) 그림 창을 업데이트하지 않고 큐를 플러시하는 방법이 있나요?
2) "이벤트 대기열을 비울 때"라고 말하면 "이벤트 대기열에있는 모든 것을 실행하십시오", "대기열에있는 다음 항목을 실행하고 대기열에서 다른 모든 항목을 삭제합니다"또는 완전히 다른 것입니까?
내 프로그램 백그라운드에서 여러 개의 개별 타이머에서 여러 콜백 기능이 있습니다. 이 콜백 중 하나를 실행하는 것은 나를위한 옵션이 아닙니다. 나는 단지 내가 옳은 일을하고 있는지 확인하고 확실하게하고 싶었다.
이것은 예입니다. 나는 while 루프에서 많은 다른 일을 할 것이다. 나는 단지'drawnow'없이 타이머 콜백이 결코 실행되지 않는다는 것을 증명하기를 원했다. –
좋아요, 그렇다면 그 루프에'drawnow'를 넣는 것이 아마도 올바른 해결책 일 것입니다. – Richante