2010-07-15 5 views
5

En mi aplicación Qt GUI, llamo pedirá el comando a través de:Llamar al símbolo del sistema desde la aplicación Qt sin congelar?

system("lots.exe & of.exe && commands.exe"); 

Se abre el símbolo del sistema (como yo quiero que), pero se congela la aplicación Qt GUI hasta que cierre el símbolo del sistema. ¿Hay alguna forma de prevenir esto? Vi que hay una clase QProcess, pero no puedo hacer que aparezca el símbolo del sistema.

¡Cualquier ayuda sería muy apreciada!

+0

¿Funciona "&&"? Esperaría que no funcionara, ya que debería ser la sintaxis del shell (cmd.exe, bash, etc.) y QProcess no maneja eso. EDITAR: estúpido, este sigue siendo el sistema() ... –

Respuesta

7

QProcess es realmente la respuesta. Si desea utilizar algo como system(), deberá colocar la llamada en otro hilo o usar popen o algo similar para sus plataformas.

QProcess tiene el setReadChannel que puede utilizar para mostrar su propia ventana de consola para mostrar la salida.

1

Solo tiene que poner esa llamada al sistema en un hilo separado.

+2

No es necesario hacer eso cuando QProcess está disponible. Además, no habría una buena manera de interrumpir el hilo mientras estaba bloqueado en el sistema(), lo que podría causar problemas si los .exe subyacentes no salen durante mucho tiempo (o nunca) –

+0

que es un problema general con el sistema (), Estoy de acuerdo :) –

1

Si no necesita ninguna de las salidas, la manera más fácil sería usar QProcess :: startDetached().

http://doc.qt.io/archives/4.6/qprocess.html#startDetached

Si usted no necesita la salida, QtConcurrent :: carrera con un futurewatcher que contiene el resultado sería menos sobrecarga/trabajo que se derivan QThread.

Cuestiones relacionadas