2011-12-06 33 views
2

が、私はウエイトバーを作成し、いくつかのコードを持って動作しません。 CTRL-Cを途中で処理して、Figureウィンドウを残してしまえば、すべて閉じることができ、Figureは消えます。しかし、ウェイトバーはそのままです。私はそのことを「すべてを閉じる」と近づける方法を知らない。Matlabのウエイトバーはすべて閉じ

私がデバッグを開始すると、しばしば20以上のウェイトバーが開いてしまうので、これが気になる理由です。 'close all'は便利です。

何らかの理由でそれらが動作しない場合
close all hidden 
close all force 

そして、あなたが持っている一つの「核」オプションがあるに削除すべての数字:

答えて

14

実は、CLOSE機能はあなたにいくつかのより多くの「強力」なオプションを提供します、CLOSEWAITBAR文書で提案されているように隠されたハンドル付きものを含む:

set(0,'ShowHiddenHandles','on'); 
delete(get(0,'Children')); 

あなたはあなたのためにこれを行うには、独自のヘルパー関数を作成するのが最も簡単な方法です(およびそのデフォルト'off'状態に'ShowHiddenHandles'の状態を返す)ので、次のように入力してできるだけ多くを持っていない:

function killEmAll 
    set(0,'ShowHiddenHandles','on'); 
    delete(get(0,'Children')); 
    set(0,'ShowHiddenHandles','off'); 
end 


...とにも第三の選択肢がしようとすることですonCleanup objectsを使用して問題を完全に回避してください(コードの構成で許可されている場合)。次のサンプルコードを実行する場合は、無限ループからCTRL-Cを押してウェイトバーを自動的に削除する必要があります。

function runprocess 
    h = waitbar(1/4, 'la la la...'); 
    waitObject = onCleanup(@() delete(h)); 
    process(); 
end 

function process 
    i = 1; 
    while (i > 0) 
    i = i + 1; 
    end 
end 
+2

「onCleanup」オブジェクトは移動方法です。 「関数内のローカル変数であるすべてのオブジェクトは、正常終了またはエラーや** Ctrl + C **などの強制終了によって、その関数の終了時に暗黙的にクリアされます。 Fが終了すると、MATLABはオブジェクトのデストラクタメソッドを呼び出すことによってcleanupObjオブジェクトをクリアします。 – Kavka

関連する問題