2011-12-06 1 views
2

가 나는 waitbar를 생성하는 코드가 작동하지 않습니다. CTRL-C를 어딘가에 처리하면 수치 창과 함께 왼쪽으로 가면 모두 닫을 수 있고 그림은 사라집니다. 그러나 대기 표시 줄은 그대로 유지됩니다. 나는 '가까운 모든 것'으로 그 것을 가까이에 만드는 법을 모른다.matlab에 waitbar 가까이 모든

이것이 귀찮은 이유는 디버깅을 시작할 때 종종 20 개 이상의 waitbars가 열려 있기 때문입니다. '모두 닫는다'는 다음에 편리합니다.

어떤 이유로 사람들이 작동하지 않는 경우
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