Autore Topic: [RISOLTO]attendere chiusura programma lanciato da un processo  (Letto 2262 volte)

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
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).
« Ultima modifica: 03 Gennaio 2011, 23:30:09 da doublemm »
Matteo DoubleMM Mion

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: attendere chiusura programma lanciato da un processo
« Risposta #1 il: 02 Gennaio 2011, 00:03:10 »
Codice: gambas [Seleziona]
risultato = SHELL "comando" WAIT
Visita il mio sito personale: http://www.leonardomiliani.com

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: attendere chiusura programma lanciato da un processo
« Risposta #2 il: 02 Gennaio 2011, 00:06:16 »
così attende la chiusura del processo di avvio di openoffice non la chiusura di openoffice
Matteo DoubleMM Mion

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: attendere chiusura programma lanciato da un processo
« Risposta #3 il: 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

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: attendere chiusura programma lanciato da un processo
« Risposta #4 il: 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?
Matteo DoubleMM Mion

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: attendere chiusura programma lanciato da un processo
« Risposta #5 il: 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.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: attendere chiusura programma lanciato da un processo
« Risposta #6 il: 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è
Matteo DoubleMM Mion

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: attendere chiusura programma lanciato da un processo
« Risposta #7 il: 03 Gennaio 2011, 23:29:40 »
ho risolto dichiarando risposta come integer e non string
Matteo DoubleMM Mion

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: [RISOLTO]attendere chiusura programma lanciato da un processo
« Risposta #8 il: 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.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: attendere chiusura programma lanciato da un processo
« Risposta #9 il: 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
     :-[
« Ultima modifica: 02 Luglio 2013, 18:47:44 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [RISOLTO]attendere chiusura programma lanciato da un processo
« Risposta #10 il: 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
« Ultima modifica: 02 Agosto 2012, 23:39:17 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline doublemm

  • Maestro Gambero
  • ****
  • Post: 445
    • Mostra profilo
Re: [RISOLTO]attendere chiusura programma lanciato da un processo
« Risposta #11 il: 02 Agosto 2012, 23:12:47 »
devo fare delle prove, appen ho tempo do un occhiata perchè mi sto dedicando ad altro. grazie comunque
Matteo DoubleMM Mion