Matlab-wachtbalk - alles sluiten werkt niet

Ik heb een code die een waitbar maakt:

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

Proces is een functie die wat plotten doet. Als ik CTRL-C ergens in het proces doe en ik achterblijft met een figuurvenster, kan ik gewoon alles sluiten en verdwijnt de figuur. De wachtbalk blijft echter staan. Ik weet niet hoe ik dat ding moet sluiten met 'alles sluiten'.

De reden hiervoor is dat wanneer ik begin met debuggen, ik vaak 20 of meer wachtbalken open heb staan. 'alles sluiten' komt dan van pas.

2

1 antwoord

Eigenlijk geeft de functie CLOSE u meer "krachtige" opties:

close all hidden
close all force

En als om een ​​of andere reden die niet werken, is een "nucleaire" optie die je hebt om alle cijfers te verwijderen, inclusief die met verborgen handvatten, zoals voorgesteld in de CLOSE en WAITBAR documentatie:

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

Misschien vindt u het het gemakkelijkst om uw eigen hulpfunctie te maken om dit voor u te doen (en de status van 'ShowHiddenHandles' naar de standaardinstelling 'off' ), zodat u niet zoveel hoeft te typen:

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


... En zelfs een derde optie is om te proberen het probleem helemaal te vermijden (als de organisatie van uw code dit toestaat) door onCleanup -objecten ! Als u de volgende voorbeeldcode uitvoert, moet de wachtbalk automatisch voor u worden verwijderd wanneer u CTRL-C uit de oneindige lus verwijdert:

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
14
toegevoegd
onCleanup -objecten is de juiste keuze. Na alle documentatie staat: "Alle objecten die lokale variabelen in een functie zijn, worden impliciet gewist bij het beëindigen van die functie, hetzij door normale voltooiing of door een gedwongen exit zoals een fout of Ctrl + C Wanneer functie F wordt beëindigd, wist MATLAB het object cleanupObj door de methode objectvernietiging aan te roepen. "
toegevoegd de auteur Kavka, de bron