MATLAB:使用drawow刷新事件队列

时间:2012-05-01 21:05:12

标签: events matlab

函数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

drawnow到位的情况下,计时器事件将每秒发生一次。没有它,就不会发生回调函数,因为while循环是“阻塞”。

我的问题:

1)有没有办法在不更新数字窗口的情况下刷新队列?

2)当我们说“刷新事件队列”时,我们的意思是“执行事件队列中的所有内容”,“执行队列中的下一步并将所有其他内容从队列中删除”,或完全不同的其他内容?< / p>

我在程序的后台发生了多个独立计时器的多个回调函数。没有执行其中一个回调对我来说不是一个选择。我只是想澄清并确保我做的是正确的事。

2 个答案:

答案 0 :(得分:2)

1)据我所知 - 至少,我认为刷新队列的唯一方法是调用drawnow。根据“更新图形窗口”的含义,您可以防止拉丝产生不良影响(例如,在调用drawow之前删除数据源)。

2)我现在无法对此进行测试,但根据我之前的使用方法以及上面给出的描述,我很确定它是“执行队列中的所有内容”。

我不确定的另一件事是你是否需要while 1; drawnow - 如果你只是在start(t)之后结束脚本,那么事件是否正常工作?我认为drawnow只有在做其他事情时才是必要的,例如在while循环中。

答案 1 :(得分:1)

如果你还在循环中放置一个小暂停,那也可以为计时器腾出一些时间。例如pause(0.001)。一些例子:

start(t); while(1);  end;              %No timer events occur
start(t); while(1); pause(0.001); end  %Timer events occur
start(t); while(1); drawnow; end       %Timer events occur (your original example)
start(t); while(1); pause(0); end      %No timer events (just thought I'd check)