Termina con grazia Run Program()Mi trovo in una situazione in cui utilizzo Run Program() per inviare file a un sito FTP/MTP. In generale tutto funziona alla grande, ma a volte c'è un nodo nella connessione e il programma è in ritardo indefinitamente. Ho ricreato questo problema dalla riga di comando ed è fondamentalmente un evento di tipo di connessione persa. Ma ho bisogno di Ctrl-break out da CMD per fermarlo.
In JMP voglio inserire un timeout per ridurre i rischi, tuttavia non sono riuscito a far funzionare bene uno. Attualmente costruisco il timeout nel comando While(!(x << isReadEof), Wait(0.1)) in modo tale che x sia impostato su 0, interrompendo il programma di esecuzione. Ma quando lo faccio, JMP spesso si blocca per un tempo breve o più lungo per correggere (o mentre qualcos'altro è stato risolto) cose in background che stavano accadendo.
C'è un modo per forzare la chiusura di Run Program() così come il processo che ha invocato senza il rischio di congelare JMP?
Grazie!
Re: Terminare con grazia Run Program()Grazie per l'idea @Craige_Hales ! Avevo già provato <
Se trovo una cosa solida che funzioni, la posterò qui, ma proverò sicuramente alcune delle tue idee!
Re: Terminare con grazia Run Program()Prova rp < i comandi di uscita o di uscita appropriati al programma FTP, seguiti da rp < . (Anche se, come dici tu, il programma FTP sembra ignorare tutto mentre la connessione persa è in sospeso.)
Quando la variabile JMP contenente l'oggetto RunProgram (rp nei miei esempi) viene sovrascritta o distrutta dalla fine di JMP, attenderà il completamento del programma ftp. Non penso che ci sia un modo per inviare il ctrl-break attraverso lo stdin FTP.
Penso che il blocco della connessione persa possa durare fino a 10 minuti per impostazione predefinita e potrebbe essere configurabile; Non sono sicuro se sarebbe nel programma FTP o in un'impostazione del registro di Windows. Per il mio test sembrava che si bloccasse per circa 1 minuto.
Tutti i miei esperimenti sono stati eseguiti con il client FTP di Windows integrato. Probabilmente ci sono altri client che potrebbero avere caratteristiche diverse.