Visualizzazione dei risultati da 1 a 7 su 7

Discussione: exec e waitfor

  1. #1

    exec e waitfor

    Ciao a tutti,
    avrei bisogno di lanciare un .exe e di sapere quando termina....
    So che c'è il metodo waitFor(), ma se ho capito bene questo metodo sospende il processo chiamante fino a che il processo chiamato non termina....
    A me servirebbe di conoscere quando il processo termina senza sospendere il processo chiamante.... non so esiste un file o una variabile da controllare?
    grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: exec e waitfor

    Originariamente inviato da gaetano_cont
    So che c'è il metodo waitFor(), ma se ho capito bene questo metodo sospende il processo chiamante
    No alt. Sospende il thread che ha invocato waitFor()!! È improprio dire il "processo".

    Originariamente inviato da gaetano_cont
    A me servirebbe di conoscere quando il processo termina senza sospendere il processo chiamante....
    Fallo in un thread separato, a sé stante.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    e se volessi far girare il thread in background? la exec me lo permette? come posso ottenere questa cosa???
    grazie

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da gaetano_cont
    e se volessi far girare il thread in background?
    Il thread non è che sono "in background" oppure no. I thread sono "flussi di esecuzione" ... e basta.
    Semmai il termine "background" può centrare con il "lavoro" eseguito nel thread.

    Ma a parte questa disquisizione, non ho capito la tua perplessità. Sai come si istanza e avvia un thread? Fallo e fai eseguire nel run() la tua exec() e poi waitFor().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    in java non ho mai creato processi multi-thread... ti spiego subito quello che devo fare così facciamo prima....

    ho un .exe da lanciare.... deve essere lanciato da java e deve lavorare in background, in più devo sapere quando termina (devo ancora decidere se il programma in java deve attendere o meno la fine esecuzione del .exe)

    allora posso facilmente lanciare un .exe con la exec .... posso attenderlo con la waitfor, nel caso in cui non volessi bloccare il programma java fino alla fine esecuzione del .exe posso creare un un nuovo thread, quindi uno aspetta e l'altro lavora....

    l'ultimo problema resta il "background"....sai dirmi come fare?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da gaetano_cont
    ho un .exe da lanciare.... deve essere lanciato da java e deve lavorare in background, in più devo sapere quando termina (devo ancora decidere se il programma in java deve attendere o meno la fine esecuzione del .exe)
    codice:
    public class Prova {
        public static void main(String[] args) {
            Thread t = new Thread(new Esecutore());
            t.start();
    
            System.out.println("Thread esecutore avviato");
        }
    
        private static class Esecutore implements Runnable {
            public void run() {
                try {
                    Runtime rt = Runtime.getRuntime();
    
                    Process p = rt.exec("notepad.exe");
    
                    System.out.println("Notepad avviato");
    
                    p.waitFor();
    
                    System.out.println("Notepad terminato");
                } catch (Exception e) {
                    System.err.println(e);
                }
            }
        }
    }
    Il nocciolo di tutto questo è quel t.start() che mette il thread in stato "runnable" ovvero schedulabile.
    Ma lo start() è praticamente brevissimo, ritorna immediatamente. Vuol dire che il thread in cui sei in quel momento (quello che ha invocato start() ) può continuare tranquillamente per i fatti suoi e un altro "flusso di esecuzione" verrà eseguito, anch'esso per i fatti suoi per eseguire il contenuto del run().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    ho inserito il tuo codice... e funziona alla grande...c'è solo un piccolo problema...notepad deve essere eseguito in background...
    io dovrei eseguire un .exe di openCV che fa aprire terminali ed altre finestre, che non devono essere visibili...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.