2016-10-14 12 views
0

を一時停止: MATLAB GUI imageMATLAB GUIは、私はのように見えますMATLABのGUIを持つ関数drawnowを使用したにも関わらず、ハングアップや

私が達成しようとしていますどのような時に一時停止を除き、MATLABは、継続的に深夜のチェックに保つということですユーザーはインターフェースを変更します。したがって、私はそれが真夜中かどうかを確認する必要があるため、バックグラウンドでwhileループを実行しています。そうであれば、私はいくつかの機能を実行します。このwhileループを含む関数は、ユーザー入力の変更が検出された後、つまりポップアップメニュー、押しボタン、テキストボックスなどのすべてのコールバック関数の終わりに検出された後に呼び出されます。これはwhileループでdrawnowを使用した理由です。ユーザーが何らかの変更を加えていくつかの計算を実行したい場合は、それが検出されます。計算の完了後、私はこのwhileループを持つ関数を再び呼び出します。

私のwhileループでdrawnowとpauseを使用しても、時には必ずしもMATLABがまだハングアップしておらず、GUIが応答しなくなり、ユーザーの入力を認識しないという問題があります。ここに私のコードのwhileループの一部です:

while 1 
    pause(0.1); 
    drawnow; 
    pause(0.1); 
    current_time=clock; 
    if current_time(4)==0 
     post_mortem; 
    end 
end 

私はそれはしかし、今の私の問題ではないことを、深夜の時間で連続的にpost_mortemを呼び出すよう上記のコードは効率的ではありません知っています。私の問題は、たとえ正午でさえ時折私が電話を切ることです。誰にもこれに対する解決策はありますか?以前の同様の質問に対する回答を探す際には、解決策を絞り込んで一時停止するように見えましたが、それは私のために働いていないようです。

ガイダンスをいただければ幸いです。

は、MATLABは、マルチスレッドではないので、継続的に(時間など)何かを確認するためにwhileループを使用すると、他の機能のブロッキングのすべての種類を引き起こすことが起こっているあなたに

+0

'while'ループの代わりに' timer'を使ってみましたか?あなたはそのように多くの*優れたパフォーマンスを得るのが好きです – Suever

答えて

0

ありがとうございます。 drawnowpauseは潜在的にこれを助けることができますが、依然として問題が発生する可能性があります。

オブジェクトを使用して、あらかじめ指定された間隔で時刻を確認することが、より洗練された信頼性の高い方法です。この方法では、GUIとのユーザー対話が自動的に登録され、pauseまたはdrawnowのいずれかを呼び出すことなくコールバックが実行されます。

GUIを作成するとすぐにタイマーを作成して開始することができます。

% Create the timer object 
handles.mytimer = timer('ExecutionMode', 'FixedRate', ... 
         'Period', 1/5, ... 
         'BusyMode', 'drop', ... 
         'TimerFcn', @(s,e)timerCallback()); 

% Start the timer 
start(handles.mytimer) 

function timerCallback() 
    % Callback that executes every time the timer ticks 

    current_time = clock; 
    if current_time(4) == 0 
     post_mortem; 
    end 
end 
関連する問題