Sunday 19 November 2017

Waitforexit Esempio C Programmazione


Come permanente è WaitForExit (). Voglio dire, c'è qualcosa di una alternativa può fare per rompere l'attesa altrimenti correrò il mio thread in una funzione separata, e controllarlo da variabili globali. La ragione - un filo CMD. EXE, con un'applicazione console in esecuzione, che abbiamo bisogno di cancellare fuori prima il filo conduttore il suo corso. Ecco quello che abbiamo: ProcessStartInfo psi nuova ProcessStartInfo (quotCMD. EXEquot, query) psi. UseShellExecute useShellExec psi. RedirectStandardOutput stdout psi. CreateNoWindow noWindow hbProc nuovo processo () hbProc Process. Start (psi) hbProc. WaitForExit () Beh, si potrebbe uso: mentre (hbProc. WaitForExit (someTimeout)) se (ShouldCancel) pausa il set 19, 5:15, quotMarc Gravellquot ltmarc. grav. gt ha scritto: gt Beh, si potrebbe usare: gt gt mentre (hbProc. WaitForExit (someTimeout)) gt se (ShouldCancel) rompere gt gt gt gt Marc (nota, non vi è alcun motivo per chiamare sia il nuovo processo () e il processo. Start (psi) o si può usare: hbProc nuovo processo () hbProc. EnableRaisingEvents vero hbProc. Exited nuova EventHandler (functionToCallAfterProcesit) hbProc. StartInfo psi hbProc. Start () altro thread - sulla desidera annullare evento: hbProc - new EventHandler ( functionToCallAfterProcesit) In entrambi i casi, basta essere consapevoli della condizione di potenziale gara tra il processo in uscita e il desiderio di annullare l'attesa il set 19, 4:11, Alistair George ltnon xtra. co. nzgt ha scritto:.. gt Come permanente è WaitForExit () voglio dire c'è qualcosa un'alternativa GT si può fare per rompere l'attesa altrimenti correrò il mio GT filo in una funzione separata, e controllarlo da variabili globali gt ragione -.. un filo CMD. EXE, con una console applicazione in esecuzione, che abbiamo Gt bisogno di cancellare fuori prima il filo conduttore il suo corso. gt Ecco ciò che abbiamo: gt ProcessStartInfo psi nuova GT ProcessStartInfo (quotCMD. EXEquot, query) gt psi. UseShellExecute useShellExec gt psi. RedirectStandardOutput stdout gt psi. CreateNoWindow noWindow gt hbProc nuovo processo () gt hbProc Process. Start (psi) gt hbProc. WaitForExit () gt gt Grazie, Alistair gt. È possibile uccidere il WaitForExit thread in esecuzione () o utilizzare l'overload che consente di specificare un timeout WaitForExit bool (int msToWait). Se si esegue in un thread separato e uccidere si sta andando ad ottenere un'eccezione interrotta. Si consiglia di assicurarsi che il processo è stato avviato non sta ancora in esecuzione (se lo è, ucciderlo). gt è possibile uccidere il WaitForExit thread in esecuzione () oppure utilizzare il sovraccarico di GT che permette di specificare un timeout WaitForExit bool (int gt msToWait). Se si esegue in un thread separato e uccide sei gt intenzione di ottenere un'eccezione interrotta. Si consiglia di assicurarsi che il processo di GT è stato avviato non sta ancora in esecuzione (se lo è, ucciderlo). ragazzi gt Grazie con i suggerimenti che sono utili. Vi consiglierà quale opzione ha funzionato meglio. Al. Copyright copia 2005-2016, TechTalkz. Tutti i diritti Reserved. Elina: Grazie per la risposta. Ci sono alcune note in fondo questo documento MSDN (msdn. microsoften-uslibraryhellip) che mettere in guardia sui potenziali deadlock se si legge alla fine di entrambi stdout e stderr ruscelli sincrono. It39s difficile dire se la soluzione è suscettibile di questo problema. Inoltre, sembra che si sta inviando l'uscita stdoutstderr processo39 terzino destro come input. Perché. ) Ndash Matthew Piatt 26 settembre 16 a 4:42 Questa è una awaitable più moderno, Task Parallel Library (TPL) soluzione basata per 4.5 e superiori. Esempio di utilizzo Attuazione risposto 5 16 ottobre alle 10:54 ho cosa che questo è semplice e l'approccio migliore (Non abbiamo bisogno AutoResetEvent): risposto 14 Giugno 12 in 14:29 Vero, ma shouldn39t essere fai. FileName Percorso quotggsci. exequot quot lt obeycommand. txtquot per semplificare il codice troppo O forse qualcosa di equivalente a quotecho comando quot Percorso quotggsci. exequot se davvero don39t desidera utilizzare un file obeycommand. txt separato. ndash Amit Naidu 4 giugno 13 alle 22:03 La soluzione non ha bisogno AutoResetEvent ma sondaggio. Quando si esegue sondaggio invece di utilizzare evento (quando sono disponibili), quindi si utilizza CPU senza motivo e che indica che sei un programmatore male. La soluzione è davvero male se confrontato con l'altro utilizzando AutoResetEvent. (Ma io non do -1 perché si è tentato di aiutare). ndash Eric Ouellet 7 novembre 14 a 18:38 mi stava avendo lo stesso problema, ma il motivo era diverso. Sarebbe tuttavia accadere in Windows 8, ma non sotto Windows 7. La seguente riga sembra aver causato il problema. La soluzione era quella di non disabilitare UseShellExecute. Ho ricevuto ora una finestra di popup Shell, che è indesiderato, ma molto meglio rispetto al programma in attesa di nulla di particolare per accadere. Così ho aggiunto il seguente work-around per questo: Ora l'unica cosa che mi dà fastidio è il motivo per cui questo accade in Windows 8, in primo luogo. risposto 13 Gennaio 15 alla 10:35 Ho provato a fare una classe che avrebbe risolto il problema utilizzando asincrono flusso di lettura, prendendo in considerazione Mark Byers, Rob, risposte stevejay. In questo modo mi sono reso conto che c'è un bug relativo al processo asincrono flusso di output di lettura. Non puoi farlo: Riceverete System. InvalidOperationException. StandardOut non è stato reindirizzato o il hasnt processo avviato ancora. Poi si deve avviare l'uscita asincrono leggere dopo il processo è iniziato: In questo modo, fare una condizione di competizione, perché il flusso di uscita in grado di ricevere i dati prima di impostare a asincrona: Poi alcune persone potrebbero dire che basta leggere il flusso prima di impostarlo asincrona. Ma lo stesso problema si verifica. Ci sarà una condizione di competizione tra il sincrono letto e impostato il flusso in modalità asincrona. Non vi è alcun modo per acheive sicura lettura asincrono di un flusso di output di un processo nel processo reale strada e ProcessStartInfo è stato progettato. Probabilmente si sta meglio utilizzando lettura asincrono come suggerito da altri utenti per il vostro caso. Ma si deve essere consapevoli che si potrebbe perdere un po 'di informazioni a causa di condizioni di gara.

No comments:

Post a Comment