Newsgroup: it.comp.lang.c
Titolo: Riavviare il programma...

Mi trovo nella situazione di dover riavviare il programma in seguito ad un 
deadlock non risolvibile altrimenti. Come posso fare? Avevo pensato ad un:
system("nome_file.exe");
exit(1);
Ma non č detto che l'eseguibile si trovi nella stessa directory in cui si 
trova la shell appena aperta... anzi!
Mi piacerebbe qualcosa di piů generale.
Grazie a tutti. Ciao
P.S. Ovviamente il tutto sotto windows.

 P.S. Ovviamente il tutto sotto windows.
ovviamente..? ;-)
-- 
Devaraja (Xdevaraja87^gmail^c0mX)
Linux Registerd User #338167
http://counter.li.org

 "sostituire" il programma in esecuzione la cosa diventa complicata...
In effetti volevo proprio "sostituire" il programma... mah, vedrň cosa 
riesco a fare...
Ciao

 verifica se windows mette il percorso completo.
La directory non fa parte del path. Mi ero dimenticato perņ che al main 
viene passato argv[].
Se non ricordo male a questo punto il main sarebbe dichiarato come:
int main(int num_arg; char *argv[])
giusto?
Grazie a tutti, ciao 

 path completo da cui avviare il programma...
Ho trovato mettendo il system() dentro un thread, ma, come in effetti era 
prevedibile, neanche cosě va bene, in quanto il programma viene terminato 
prima che la funzione system() possa essere invocata.
A questo punto non so cosa fare, visto che neanche tra le funzioni del 
sistema operativo ho trovato quello che cercavo


 giusto?
Ho provato, ed il path viene effettivamente restituito completo. Resta però 
ora il problema che con la system() il programma non va avanti (e quindi non 
può essere chiuso) fino a quando non viene terminata la nuova applicazione 
aperta. Ho provato a lanciare system() in un thread, ma non funziona, in 
quanto l'exit(1) viene eseguito prima del thread stesso, e quindi il 
programma non viene riavviato.
Come fare?
Ciao

 
Un'idea astuta potrebbe essere quella di spostare la discussione in un 
newsgroup in cui l'argomento non sia OT, come invece č in questa sede.
Suggerirei 'it.comp.programmare.win32', oppure qualcuno dei newsgroup della 
gerarchia 'microsoft.public.it.*'. Suggerirei anche di cercare meglio su 
MSDN (hint: "CreateProcess").
MM

 programma non viene riavviato.
Su unix sarebbe possibile lanciare il programma in background:
system("programma &"); ma su Windows non saprei.  Prova a chiedere su un 
NG di windows.


 MSDN (hint: "CreateProcess").
Parlare del funzionameto della system() e` OT?


 
Beh. L'effetto di una chiamata a 'system' dipende dal significato che ha il 
parametro in quel particolare ambiente in cui sta girando il programma. 
Direi che non c'è molto altro da dire su 'system'. Non riesco per altro a 
immaginare un valido motivo per usarla in un'applicazione reale.
Max

Troppe complicazioni. Secondo me basta una MessageBox che dica
all'utene che il programma deve essere riavviato.
A me sembra la soluzione più semplice. D'altronde, è la stessa
politica di Windows...

 Ciao
Ciao


Perchè invece non cominciare a cambiare questa tendenza? I sistemi
funzioneranno sempre male, finchè ci saranno programmatori che scelgono sempre
la linea più comoda...
Sbattersi un paio di mezz'ore in più per ottenere una cosa fatta bene, è molto
più gratificante, credetemi...
--
mike

Anch'io sono più o meno per la stessa linea di condotta, ma bisogna
anche considerare vantaggi e svantaggi. Per quanto mi riguarda, una
soluzione del genere è più che accettabile per un programma senza
molte pretese.
Poi la scelta dipende solo da MonsterMash...

Una delle soluzioni più brutte che il mio cervello potesse trovare e'
quella di mettere una sleep(x) prima dell'exit().
Dovrebbe funzionare, se metti un valore di x grande quanto basta, e se
non devi far leggere il codice a nessuno. Nell'ultimo caso infatti ti
deriderebbero per anni.
Saludos