Visualizzazione dei risultati da 1 a 7 su 7

Hybrid View

  1. #1
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Proprio "obbligo" no. Nel senso che se tu sai che il processo non fa assolutamente output o se di per sé può farne ma l'hai avviato con una qualche sua opzione che lo rende "quiet" (silenzioso) .... allora non è veramente necessario leggere gli stream di Process.


    exec non crea alcun thread! Semplicemente la richiesta al sistema di avviare un nuovo processo è una cosa che richiede frazioni di un secondo .... non secondi o minuti.


    Se il processo fa "abbastanza" output su standard-output e/o standard-error, ripeto che gli stream di Process vanno letti.
    Per sapere se il processo fa dell'output, documentati se ha una documentazione o comunque provalo "a mano" da una console.
    Ah perfetto, allora non è stato inutile utilizzare Process in un nuovo thread perché anche se come tu scrivi, la richiesta al sistema di avviare un nuovo processo è una cosa che richiede istanti, nel mio caso il processo esterno che viene eseguito è un processo pesantissimo che fa delle elaborazioni complicatissime su segnali in arrivo da un radar x-band collegato al pc tramite una scheda proprietaria di acquisizione.
    Capirai quindi che quel exec se viene eseguito nell'edt può realmente creare seri problemi o addirittura blocchi nella gui stessa se qualcosa non dovesse andare correttamente e comunque essendo un processo che non esce, ma resta in uno stato di elaborazione continua, credo che se non viene gestito in un altro thread non può che appesantire l'edt che si rallenterebbe o diventerebbe instabile.
    In poche parole se invoco Runtime.exec senza farlo nel run di un nuovo Thread, per forza di cose quell'oggetto Process viene gestito nell'unico thread dell'edt e questo non credo sia la soluzione corretta considerando che l'eseguibile avviato dall'exec è molto pesante e soprattutto non ritorna mai.
    Ultima modifica di Samaritan; 05-04-2014 a 23:22

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Samaritan Visualizza il messaggio
    nel mio caso il processo esterno che viene eseguito è un processo pesantissimo che fa delle elaborazioni complicatissime su segnali in arrivo da un radar x-band collegato al pc tramite una scheda proprietaria di acquisizione.
    Questo non vuol dire assolutamente niente. Qui non centra cosa fa o usa il nuovo processo esterno.

    Quote Originariamente inviata da Samaritan Visualizza il messaggio
    Capirai quindi che quel exec se viene eseguito nell'edt può realmente creare seri problemi o addirittura blocchi nella gui stessa se qualcosa non dovesse andare correttamente
    Ripeto che exec() è generalmente quasi immediato. Non centra se quello che lanci è un super-mega-programma che fa chissà che cosa per chissà quanto tempo ....

    Quote Originariamente inviata da Samaritan Visualizza il messaggio
    e comunque essendo un processo che non esce, ma resta in uno stato di elaborazione continua, credo che se non viene gestito in un altro thread non può che appesantire l'edt che si rallenterebbe o diventerebbe instabile.
    Se devi aspettare il suo exit-code e/o gestire i suoi stream, sì, ovviamente questo non va fatto nel EDT.

    Quote Originariamente inviata da Samaritan Visualizza il messaggio
    In poche parole se invoco Runtime.exec senza farlo nel run di un nuovo Thread, per forza di cose quell'oggetto Process viene gestito nell'unico thread dell'edt
    Te lo ripeto ancora una volta: exec() è veloce, non è certo questo che bloccherebbe in modo grave il EDT.
    Sui sistemi Windows il exec() è sicuramente veloce, ne ho già avuto prova diverse volte. Sui sistemi Unix-like il concetto di "spawn" di un nuovo processo è un po' diverso rispetto ai Windows, quindi ci sono altre cose da considerare ma non credo, onestamente, che si possa parlare di "secondi" .... molto meno.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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 © 2026 vBulletin Solutions, Inc. All rights reserved.