【Qt开发】调起外部程序/进程

在Qt4中,QProcess作为QIODevice的继承类,主要用来实现启动外部应用程序,并且进行进程间通信的。

调起外部程序,主要有两种方式: start()和startDetached()。这两种方式的区别是,start()后的进程与原有进程属于父子进程关系,当父进程退出后,被调起的进程也会结束;而startDetached()会在程序调起完成后,将这两个进程分离开来。

(1)

start()方法可以这样使用:

QProcess *pProcess = new QProcess(this);
pProcess->start(process_path);
不过这里本人有个疑问, pProcess应该是什么时候去delete的呢?如果不使用new来创建,而在栈上创建QProcess对象有什么区别(如:QProcess process)?

(2)

startDetached()的方法可以这样使用():

QProcess::startDetached(process_path);
QProcess类还重载了这几个方法,如

bool startDetached ( const QString & program, const QStringList & arguments, const QString & workingDirectory, qint64 * pid = 0 )
bool startDetached ( const QString & program, const QStringList & arguments )
bool startDetached ( const QString & program )

参数workingDirectory指定了程序运行的工作目录,当有数据输出时,会根据此来获得输出的相对路径及位置。

参数arguments应该是在该程序被启动后,用作数据传递吧;没有实践过这个参数,有待验证。

而这几个方法被设计为静态方法,很想知道这样设计的好处(免于创建对象外)和原理。


(3)对于QProcess的机制,大致可以理解为:在Qt4版本之前,QProcess是利用socket的双向通道机制实现了进程间的通信;但由于QProcess实际上只是实现了单向通信功能,浪费了socket的部分资源,在Qt4改用无名管道的通信机制(使用至少两个单向通信的管道来实现进程间通信)。

对于QProcess的应用场合,和信号/槽机制有点相对:信号/槽机制用于内部对象间通信;而QProcess则用于与外部对象通信,或所谓进程间通信。


你可能感兴趣的:(【Qt开发】调起外部程序/进程)