2011-12-06 63 views
2

我有一些代碼,創建了一個waitbar:Matlab的waitbar - 關閉所有不工作

if long_process %user specifies this true/false 
    h = waitbar(1/4, msg); 
end 
process(arg1,arg2); 

過程是一些功能,做一些繪圖。如果我在進程中的某個地方執行CTRL-C,並且我還剩下一個數字窗口,我可以關閉所有數字,數字就會消失。但是,等待欄停留。我不知道如何通過'關閉所有'來關閉它。

這是困擾的原因是因爲當我開始調試時,我經常最終打開20多個waitbars。 '關閉所有'然後派上用場。

回答

14

實際上,CLOSE功能給你一些更「有力」的選項:

close all hidden 
close all force 

如果因爲某些原因而不能正常工作,一個「核」選項,你必須是刪除所有人物,包括那些隱藏把手,爲CLOSEWAITBAR文檔中建議:

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

您可能會發現最簡單的創建自己的輔助函數來爲你做這個(和'ShowHiddenHandles'狀態返回到默認狀態'off'),所以你不要有儘可能多的鍵入:

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