2012-01-22 8 views
8

Ho creato una piccola GUI per manipolare i dati e di recente ho deciso di spostare il database su un server MySQL. Ho creato un programma Java per portare avanti e indietro i dati e ho iniziato a notare il ritardo quando i server di accesso all'estero.Come faccio a sapere se Matlab è occupato quando si usano le GUI?

Quando si eseguono gli script tramite la finestra dei comandi, Matlab visualizza un testo "occupato" nell'angolo in basso a sinistra, ma non quando sono in esecuzione GUI.

Quindi, come faccio a sapere se Matlab è occupato quando si utilizzano le GUI?

Grazie in anticipo.

Modifica: esempio veloce.

corro nella finestra di comando (o un test.m sceneggiatura)

for i = 1:100000 
    a = i+i; 
    disp(a); 
end 

La barra di stato dice: "Occupato".

Quando creo una GUI, con il pulsante "Click me" che esegue lo stesso script esatto. Il segno di occupato sulla barra di stato non viene visualizzato.

Perché questo e cosa posso fare a riguardo? Voglio essere in grado di vedere se la mia GUI è occupata o meno.

+0

Invece di fare affidamento sul segno occupato nell'IDE principale, non è possibile implementare una sorta di barra di attesa o stampare il proprio messaggio di avanzamento al prompt dei comandi. Entrambe queste idee sono dirette [qui] (http://blogs.mathworks.com/loren/2007/08/01/monitoring-progress-of-a-calculation/). – Chris

risposta

3

Dovresti essere in grado di modificare il messaggio della barra di stato della finestra MATLAB principale utilizzando la sottomissione statusbar da Yair Altman su MathWorks File Exchange. Discute di come funziona in a post on his blog "Undocumented Matlab".

Con questa utility, si dovrebbe essere in grado di visualizzare un messaggio "Occupato ..." anche quando MATLAB non lo fa automaticamente. Il codice per il "Click me" tasto di richiamata sarebbe probabilmente simile a questa:

... 
statusbar(0, 'Busy...'); %# Set the status message 
test;      %# Run your function/script 
statusbar(0, '');   %# Clear the status message 
... 
+0

Sì, è un piccolo strumento pulito ma quando ho detto che ho creato una piccola interfaccia grafica ho mentito. Per me, un debuttante, è una GUI piuttosto grande e aggiungerla a tutti i miei callback (che ne hanno bisogno) è una gran seccatura. Risolve il problema che avevo ma non è la soluzione che speravo. Considero questo problema risolto. Grazie per il tuo contributo. –

4

Lo dice nella barra di stato della finestra principale!

MODIFICA:
Quindi la risposta è no, al momento non c'è modo di dire (facilmente) se matlab è impegnato a fare qualcosa di diverso da un lavoro da riga di comando.

+0

Sì, ma non per le GUI. –

+0

Questo può dipendere dalla versione, ma perché è necessario sapere questo, voglio dire, capisco che sarebbe molto bello ma fa qualcosa di disfunzionale? – Ali

+0

Non volevo chiedere in giro se c'era un modo semplice per collegarsi a questo messaggio "Occupato" nella finestra principale. Bastano pochi secondi per recuperare "grandi" quantità di dati, 10.000 x 10 matrici quando il server non è a portata di mano. Renderebbe la GUI più user friendly. La GUI sta ignorando i comandi quando è occupato, quindi non è un grosso problema. Grazie per la tua risposta –

2

si potrebbe aggiungere un testo statico sulla stessa interfaccia grafica e impostare il testo per 'occupato'/'Idle' prima/dopo il vostro i calcoli sono fatti, se rendere la GUI più user-friendly è la preoccupazione.

2

Probabilmente quello che stai cercando:

inserire qualsiasi codice arbritary nella linea di comando.

ad es. somthing come

asdfasdfasdfasdf

Se la routine interfaccia grafica è ancora in esecuzione, allora sarà di occupato, fino a quando la funzione GUi è terminato. Solo allora può iniziare ad eseguire asdfasdfasdfasdf.

Se il Gui è già terminato, eseguirà asdfasdfasdfasdf istantaneamente e visualizzerà il messaggio di errore corrispondente.

In precedenza tutti i MATLAB hanno visualizzato anche il messaggio di occupato, quando è in esecuzione una funzione avviata da Gui. Dal 2012 questo sembra non essere più il caso.

0

Aggiungere una casella di testo statico alla GUI. Nella tua calcolare icona di callback, scrivere questo:

set(handle.text,'string','busy') 
pause(0.1) 
. 
. 
. 
// Your code 
. 
. 
. 
pause(0.1) 
set(handle.text,'string','done') 
0

This thread oltre a MathWorks dice che può essere fatto utilizzando la File Exchange entry CmdWinTool. Se si scarica quel file, è possibile utilizzarlo per scoprire se MATLAB è occupato con CmdWinTool('isBusy'). Nota che CmdWinTool sfrutta le funzionalità non documentate nell'uso di Java da parte di MATLAB, quindi è improbabile che MathWorks lo supporti.

Problemi correlati