Domanda

Ho del codice che crea una barra di attesa:

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

Il processo è una funzione che esegue alcuni grafici.Se faccio CTRL-C da qualche parte in corso e mi rimane una finestra della figura, posso semplicemente chiudere tutto e la figura scompare.Tuttavia, la barra di attesa rimane.Non so come chiudere quella cosa con "chiudi tutto".

Il motivo per cui questo è fastidioso è perché quando inizio il debug spesso finisco per avere più di 20 barre di attesa aperte."chiudi tutto" torna utile.

È stato utile?

Soluzione

In realtà, la funzione close ti dà un po 'più di "forza "opzioni:

close all hidden
close all force

E se per qualche motivo quelle non funzionano, un'opzione "nucleare" che hai è quella di eliminare tutte le cifre, comprese quelle con maniglie nascoste, come suggerito in close e waitbar documentazione:

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

Potresti trovare più semplice creare la tua funzione di supporto per farlo per te (e restituire lo stato di 'ShowHiddenHandles' al suo stato 'off' predefinito) in modo da non avere tanto da digitare:

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

... E anche una terza opzione è cercare di evitare del tutto il problema (se l'organizzazione del codice lo consente) utilizzando onCleanup objects ! Se esegui il seguente codice di esempio, la barra di attesa dovrebbe essere automaticamente eliminata quando CTRL - C fuori dal ciclo infinito:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top