【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则用于与外部对象通信,或所谓进程间通信。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值