Gambas-it

Gambas3 => Programmazione => Topic aperto da: doublemm - 01 Gennaio 2011, 17:30:35

Titolo: [RISOLTO]attendere chiusura programma lanciato da un processo
Inserito da: doublemm - 01 Gennaio 2011, 17:30:35
ciao a tutti e buon anno.

Dopo aver lanciato un processo

Codice: gambas [Seleziona]

hStampa = Shell ("openoffice.org " & User.Home & "/report.pdf")


vorrei che il programma aspettasse la chiusura di openoffice prima di eseguire altri comandi (ovvero la richiesta di cancellazione del file report.pdf appena letto con openoffice).
Titolo: Re: attendere chiusura programma lanciato da un processo
Inserito da: leo72 - 02 Gennaio 2011, 00:03:10
Codice: gambas [Seleziona]
risultato = SHELL "comando" WAIT
Titolo: Re: attendere chiusura programma lanciato da un processo
Inserito da: doublemm - 02 Gennaio 2011, 00:06:16
così attende la chiusura del processo di avvio di openoffice non la chiusura di openoffice
Titolo: Re: attendere chiusura programma lanciato da un processo
Inserito da: fsurfing - 02 Gennaio 2011, 21:17:40
puoi fare un desktop.find

per trovare il pid del programma e quindi controllarle lo stato, quando rilevio che questo viene terminato avanzi con le altre istruzioni
Titolo: Re: attendere chiusura programma lanciato da un processo
Inserito da: doublemm - 02 Gennaio 2011, 22:00:23
Grazie della risposta. Potrebbe essere la strada giusta ma non so come si usa. Ho dato un occhiata mi sembra di aver capito che desktop.find (ho visto che su gambas 3 se scrivo desktop. tra le varie opzioni ho findwindows ma no find) dovrebbe restituire un vettore con tutte le finestre aperte quindi anche quella del programma che mi interessa. Potrei acquisire il pid della finestra openoffice e subito dopo il processo che la apre avviare un loop con uscita pidDIopenoffice=chiuso. Mi potresti dare qualche consiglio su come metterlo in pratica?
Titolo: Re: attendere chiusura programma lanciato da un processo
Inserito da: leo72 - 03 Gennaio 2011, 01:02:12
Nel mio gestionale controllo che il programma non sia già in esecuzione così:
Codice: gambas [Seleziona]

PRIVATE FUNCTION MultiIstanza() AS Boolean
DIM Risposta AS String
 
  SHELL "ps aux | grep " & Application.Name & ".gambas" & " | grep -wv grep | wc -l" TO Risposta
 
  RETURN IIf(Val(Risposta) > 1, TRUE, FALSE)
         
END


Immagino che se a Application.Name sostituisci il nome del programma da monitorare, funzioni anche nel caso di OO.
Titolo: Re: attendere chiusura programma lanciato da un processo
Inserito da: doublemm - 03 Gennaio 2011, 23:17:52
@leo ho provato il tuo sistema e mi sembra che la riga di comando funzioni:

Codice: gambas [Seleziona]
  
   
    Shell "ps aux | grep " & "/usr/lib/openoffice/program/soffice.bin" & " | grep -wv grep | wc -l" To Risposta
   
 
 
 Message.Info(risposta, "OK")


risposta è 1 se il prog è attivo e 0 se è chiuso

io pensavo di usarla dentro un loop subito dopo la chiamata a openoffice in modo che mi esca dal loop solo se risposta=0

dentro al loop ho verificato che lo stato di risposta cambia da 1 a 0 ma il loop non si ferma non capisco perchè
Titolo: Re: attendere chiusura programma lanciato da un processo
Inserito da: doublemm - 03 Gennaio 2011, 23:29:40
ho risolto dichiarando risposta come integer e non string
Titolo: Re: [RISOLTO]attendere chiusura programma lanciato da un processo
Inserito da: leo72 - 04 Gennaio 2011, 00:16:56
E' un codice scritto per una vecchia versione di Gambas. Probabilmente avrebbe funzionato meglio dichiarando Risposta come Bool.
Ma anche Int va bene, tanto TRUE e FALSE alla fine sono appunto alias di 1 e 0.
Titolo: Re: attendere chiusura programma lanciato da un processo
Inserito da: vuott - 11 Settembre 2011, 00:51:18
così attende la chiusura del processo di avvio di openoffice non la chiusura di openoffice


Forse....

 
Codice: gambas [Seleziona]
Shell "killall nome_programma" Wait
     :-[
Titolo: Re: [RISOLTO]attendere chiusura programma lanciato da un processo
Inserito da: vuott - 02 Agosto 2012, 01:54:29
...forse anche una cosa di questo genere:  :-[
Codice: gambas [Seleziona]


 Private pr As Process

......
......

Public Sub Button1_Click()
  
  pr.Kill
  
  While pr.State = 1
     Print "Chiusura programma in corso"
  Wend
  
  Print "Programma chiuso"

  ' quindi il resto del programma da processare......

End


   :-X


...e anche con la sollevazione dell'evento _Kill() alla chiusura del programma gestito da "Process"....
Codice: gambas [Seleziona]

Private pr As Process

Public Sub Button1_Click()

  pr = Exec["percorso_programma"] As "processo"

End


Public Sub processo_Kill()

   Print "Il processo è stato chiuso !"

' qui il resto del programma da processare.........

End
Titolo: Re: [RISOLTO]attendere chiusura programma lanciato da un processo
Inserito da: doublemm - 02 Agosto 2012, 23:12:47
devo fare delle prove, appen ho tempo do un occhiata perchè mi sto dedicando ad altro. grazie comunque