Autore Topic: comando WAIT coinvolge tutti i form  (Letto 1535 volte)

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
comando WAIT coinvolge tutti i form
« il: 06 Maggio 2009, 16:24:19 »
Ho potuto notare uno strano comportamento di Gambas col comando WAIT....

Questo comando infatti, scritto nel codice di un form, al momento del suo lancio coinvolge tutti i form attivi nel momento in cui il comando è in uso...se ad esempio ci sono due form attivi che fanno qualcosa ed uno dei due scatena il comando WAIT allora entrambi smettono di funzionare finchè esso non ha finito....è normale questa cosa o è un bug?

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: comando WAIT coinvolge tutti i form
« Risposta #1 il: 06 Maggio 2009, 16:40:56 »
Uhm.. considerando che il comando WAIT serve a rendere temporaneamente il controllo all'interprete Gambas per controllare l'input dell'utente e rinfrescare la GUI dell'applicazione, immagino che il comportamento descritto sia compatibile con ciò che il comando fa, anche in caso di più form aperti (che, cmq, appartengono sempre ad un'unica applicazione dato che i thread in Gambas non esistono).
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: comando WAIT coinvolge tutti i form
« Risposta #2 il: 06 Maggio 2009, 17:50:56 »
Ma nel mio caso il WAIT di un form che scarica blocca il timer dell'altro form che dovrebbe cambiare la scritta si un label...così sembra che l'applicazione è ferma mentre invece funziona!

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: comando WAIT coinvolge tutti i form
« Risposta #3 il: 06 Maggio 2009, 18:13:36 »
Credo che, essendo un comando diretto, senza alcun parametro, l'idea sia stata proprio quella di ritornare il controllo all'interprete, a prescindere da cosa stà girando.

Una bella idea sarebbe quella di implementare una funzione analoga, a cui passare un parametro, corrispondente al controllo Parent...

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: comando WAIT coinvolge tutti i form
« Risposta #4 il: 06 Maggio 2009, 23:09:10 »
Non puoi implementare una tua versione di WAIT, magari usando un altro timer nel form che deve controllare i dati generati dall'altro?
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: comando WAIT coinvolge tutti i form
« Risposta #5 il: 07 Maggio 2009, 00:29:41 »
Non penso sia fattibile perchè il mio wait è posto dopo un comando da shell...

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: comando WAIT coinvolge tutti i form
« Risposta #6 il: 07 Maggio 2009, 01:25:28 »
Usando un EXEC associato ad un Process ???

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: comando WAIT coinvolge tutti i form
« Risposta #7 il: 07 Maggio 2009, 06:44:05 »
Oppure:

1a soluzione:
associare lo SHELL con WAIT associato ad un processo con:
Codice: [Seleziona]

DIM Comando AS String
DIM Processo AS Process
  Comando = "crei la stringa del tuo comando"
  Processo = SHELL (Comando) WAIT

Crei il processo e lo associ ad un oggetto di tipo Process, che poi puoi gestire.

2a soluzione:
usare il reindirizzamento di SHELL su una variabile:
Codice: [Seleziona]

DIM Comando, Risultato AS String
  Comando = "crei la stringa del tuo comando"
  SHELL Comando TO Risultato
  '--gestisci il risultato
  .......

Con questa sintassi l'esecuzione del programma è sospesa fino a quando SHELL non ha terminato l'esecuzione di Comando ed ha restituito il risultato in Risultato.

Questa seconda versione è simile alla prima con la differenza che hai il risultato disponibile in una variabile (es. il suo output: "ls -la").
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: comando WAIT coinvolge tutti i form
« Risposta #8 il: 07 Maggio 2009, 13:22:15 »
@ Leo

I tuoi comandi non sono molto diversi da ciò che faccio io! Io eseguo un wget in questo modo

SHELL "wget " & file_da_scaricare WAIT

Quindi salto solo il passaggio di assegnare il comando ad una variabile.

Il problema è che ovunque stia WAIT blocca tutto comunque....perchè un'operazione deve pur farla...

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: comando WAIT coinvolge tutti i form
« Risposta #9 il: 07 Maggio 2009, 19:41:54 »
Eh, sì.
Allora è proprio il suo modus operandi. Che, cmq, mi pare piuttosto logico dato che essendo l'applicazione, anche se composta da più form, eseguita da una singola istanza dell'interprete, gira "in blocco" unico.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: comando WAIT coinvolge tutti i form
« Risposta #10 il: 07 Maggio 2009, 23:25:26 »
A me personalmente non pare così logica come cosa.....si dovrebbe fare in modo di avere un WAIT un pò più dinamico....che magari possa accettare dei parametri quali possono essere un form op un oggetto o che sò io....

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: comando WAIT coinvolge tutti i form
« Risposta #11 il: 08 Maggio 2009, 00:55:04 »
E perchè no, un multithreading?

Putroppo questa parte di software manca...

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: comando WAIT coinvolge tutti i form
« Risposta #12 il: 08 Maggio 2009, 23:12:22 »
E manco verrà mai implementata.
Ecco la risposta di Benoit data ad un utente che in mailing-list chiedeva dei thread in Gambas (roba di 8 mesi fa):

Citazione

Gambas interpreter was not designed to be multi-threaded at all.

What sort of background process people want to do during their application? I
never had such a need.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: comando WAIT coinvolge tutti i form
« Risposta #13 il: 11 Maggio 2009, 12:05:07 »
Appunto...

  • Visitatore
Re: comando WAIT coinvolge tutti i form
« Risposta #14 il: 29 Maggio 2009, 01:15:41 »
Buonanotte....
Secondo voi avendo il codice allegato dove lo devo schiaffare un WAIT per evitare che mi si freezi l'interfaccia ????
Considerando che non è tanto il loop a freezare ma la dimesione del singolo file che copio a romper le balle ....

Codice: [Seleziona]

FOR EACH item IN source

IF IsDir(item) THEN
MKDIR destination &/ File.Name(item)
            FOR EACH subitem IN RDir(item, "*")
                                                                 IF IsDir(item &/ subitem) THEN
                                           MKDIR destination &/ File.Name(item) &/ subitem
                                  ELSE
                      COPY item &/ subitem TO destination &/ File.Name(item) &/ subitem
                                  ENDIF
            NEXT
ELSE
                      TRY COPY item TO destination &/ File.Name(item)
ENDIF
NEXT