Newsgroup: it.comp.programmare
Titolo: Esecuzione automatica in ritardo

Buon giorno a tutti, vorrei sapere come poter fare eseguire a Win98SE
il seguente compito.
Ho due programmi che devono partire automaticamente all'avvio, e fin
qui nessun problema,se non fosse che il secondo deve partire un minuto
dopo il primo, in quanto deve attendere che il primo faccia una serie
di operazioni per poter funzionare.
Come posso far eseguire, in esecuzione automatica, i due programmi a
distanza di un minuto l'uno dall'altro?
Grazie a tutti coloro che vorranno darmi un cosiglio.

distanza di un minuto l'uno dall'altro?
Non puoi.
Puoi perņ non lanciare questi due programmi ma un altro programma che
lancia il primo, aspetta per un minuto e infine lancia il secondo.
-- 
Marco Barisione (ICQ 84277092)

 lancia il primo, aspetta per un minuto e infine lancia il secondo.
Oppure, piů semplicemente, aggiungere una pausa (Sleep(60000)) nel secondo
programma ed eseguirli contemporaneamente.
Kiuhnm

programma ed eseguirli contemporaneamente.
Sì, però se il secondo programma deve essere eseguito anche
normalmente questo non va bene. Si può comunque farlo eseguire
automaticamente passandogli un opzione sulla linea di comando che gli
dica "dormi per 1 minuto".


 programma ed eseguirli contemporaneamente.
Geniale ;) ma ci sono due problemi, uno pratico e l'altro piu'
teorico: quello pratico e' che i programmi potrebbe non averli scritti
il nostro amico e se cosi' fosse la tua soluzione sarebbe
impraticabile.  Inoltre, non sarebbe la soluzione al problema "come
faccio ad eseguire due programmi, il secondo a distanza di un minuto
dalla fine del primo ?" (peraltro OT da trattare qui dentro).  Il
secondo problema, piu' teorico, nasce se il nostro amico e' in grado
di modificare e ricompilare il programma.  La distanza di un minuto
tra l'uno e l'altro e' motivata dall'interazione tra i programmi e non
e' strettamente legata all'elaborazione compiuta da un singolo
programma.
Il secondo programma potrebbe non necessitare dell'attesa di un
minuto, prima di partire con la sua elaborazione e, nel caso la sua
elaborazione fosse sganciabile e usabile separatamente rispetto a
quella del primo, l'attesa di un minuto, alla partenza, sarebbe
un'inutile perdita di tempo.
Esempio pratico: costruisco tre moduli, uno di estrazione di una base
dati su un file di testo, uno di connessione a internet, uno di
spedizione via ftp.
Il primo parte, sono sicuro che ci mette meno di 1 minuto a compiere
la sua elaborazione, quindi, supponendo che possa farlo, imposto il
secondo perche' parta, per sicurezza, un minuto dopo.  So che il
modulo di connessione a internet ci mettera' circa 3 minuti a
concludere tutto, quindi imposto il terzo modulo perche' parta, per
sicurezza, 4 minuti dopo.
Ora, non ha senso inserire degli Sleep() all'inizio di ogni programma,
perche', a parte che dovrei complicarmi la vita perche' possano essere
parametrizzabili, la loro elaborazione potrebbe essere usata,
singolarmente, in altri contesti e attese simili, all'inizio,
sarebbero inutili.
Inoltre, tieni presente, e questo costituisce un terzo problema, che
l'elaborazione di programmi in cascata e' generalmente guidata dagli
esiti.
Cioe', normalmente, qunado un'operazione deve essere compiuta da piu'
moduli, se uno dei moduli va in errore e termina, gli altri possono o
non possono partire, a seconda dei casi e con il metodo che suggerisci
questa eventualita' non sarebbe controllabile, in quanto stabilito
dall'inizio che lavoreranno tutti.
In soldoni, la mia soluzione per il problema del nostro amico e'
quella di costruire un programma "guida", cioe' un programma al quale
si dice quali programmi vanno lanciati, in quale sequenza e se c'e'
bisogno di attendere un determinato tempo tra un lancio e l'altro, se
un lancio va fatto anche in caso d'errore del programma precedente,
ecc... ecc...
Un programma del genere (parlo di Windows) e' fattibile in modo
banale, sfruttando la ShellExecuteEx e WaitForSingleObject.
So che e' tua prassi quella di mandare a quel paese gli altri, quando
non la pensano come te, quindi mi aspetto che tu lo faccia anche
questa volta ;)

 dica "dormi per 1 minuto".
Neanche questa mi sembra una buona soluzione.  Si lega la necessita'
di avere una pausa in una determinata interazione tra due programmi
(che magari si usera' una sola volta nella vita ;) con l'elaborazione
nuda e crudo del programma.  A mio avviso, come gia' detto nell'altro
messaggio, sarebbe bene costruire un programma "starter", con le
diverse opzioni (lancia il programma X all'ora Y, attendi tot secondi
tra un programma e l'altro, ecc... ecc...).  Un programma del genere
"incapsula" l'interazione tra le applicazioni e potrebbe essere esteso
con altre opzioni e usato a livello generale per lanciare applicazioni
in sequenza.

Io ho semplicemente risposto alla richiesta:
"Come posso far eseguire, in esecuzione automatica, i due programmi a
distanza di un minuto l'uno dall'altro?
Grazie a tutti coloro che vorranno darmi un cosiglio."
Ma mi rendo conto adesso che davo per scontato che i prg fossero stati
scritti da lui...allora è senz'altro migliore la soluzione dello Starter.
(lo Sleep era per semplificare le cose, non ho mai detto che era la
soluzione migliore...)
Kiuhnm
P.S. Non tirarmi fuori gli esempi con 20 programmi, lui l'ha chiesto per 2.

 P.S. Non tirarmi fuori gli esempi con 20 programmi, lui l'ha chiesto per
2.
2 o 20 non fa differenza.
--------------------------------
Inviato via 
http://usenet.libero.it