2012-05-01 13 views
0

でイベントキューをフラッシュdrawnowMATLAB:機能関数drawnow

原因は、更新するために窓や子供たちを理解し、システムイベントキューをフラッシュします。受信イベント(マウスやキーイベントなど)によって生成されたコールバックは、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)Figureウィンドウを更新せずにキューをフラッシュする方法はありますか?

2)「イベントキューをフラッシュする」とは、「イベントキュー内のすべてを実行する」「キュー内で次に実行するものを実行し、他のすべてをキューから落とす」などのことですか?

私は、プログラムのバックグラウンドで起こっている複数の別々のタイマーから複数のコールバック関数を持っています。これらのコールバックのいずれかを実行していないことは私の選択肢ではありません。私は明確にして、私が正しいことをしていることを確認したかっただけです。

答えて

2

1)少なくとも私はキューをフラッシュする唯一の方法はdrawnowを呼び出すことだと思います。あなたは 'Figure Windowを更新する'という意味に応じて、drawnowが望ましくない影響を受けるのを防ぐことができます(例えばdrawnowを呼び出す前にデータソースを削除することによって)。

2)私は今これをテストすることはできませんが、前にどのように使用したかと、上で説明した説明に基づいて、「キュー内のすべてを実行する」と確信しています。

もう1つのことは、あなたが必要かどうかです。while 1; drawnow - ちょうどstart(t)の後にスクリプトを終了すると予想されるようにイベントは機能しませんか?私はdrawnowが他のものをやっている場合にのみ必要であると思った。 whileループの内側。

+0

これは一例です。私はそのwhileループで他にもたくさんのことをしていきます。私はちょうど 'drawnow'タイマーコールバックが実行されないことを実証したかったのです。 –

+0

大丈夫です、そうです、そのループに 'drawnow'を置くことはおそらく正しい解決策です。 – Richante

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) 
+0

私はそれを試してみましたが、実際には '助けられた'(または '助けていた'という意味ですか?)に 'ポーズ'が 'drawnow'を呼んでいます。 –

+0

私はそれを認識しませんでした。毎日何か新しいことを学ぶ。 – Pursuit