利用QProcess::finished信号(signal)来保持目标程序始终运行
2016-08-05 23:56
344 查看
QProcess有一个signal叫做finished,具体定义如下:
void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus)当进程结束的时候,该signal会被发射出去。exitCode就是进程的退出码,而exitStatus就是退出状态。
若在一个系统服务中,想保持另一个进程始终处于运行状态(比如某server),那么就可以connect这个finished信号。详细代码如下:
void keepProcessRunning()
{
QProcess* p = new QProcess();
QObject::connect(p, &QProcess::started, [] () {
qDebug() << "Notepad.exe started!";
});
// Keep restarting if notepad.exe is finished
QObject::connect(p, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
[p] (int exitCode, QProcess::ExitStatus exitStatus) {
qWarning() << "Notepad.exe was terminated! "
<< "Exit code: " << exitCode
<< "Exit status: " << exitStatus;
// restart
qWarning() << "Notepad.exe will restart... ";
p->start();
});
p->start("notepad.exe");
}
以上代码中,先连接了started() signal,但这仅仅是为了打印一条语句“Notepad.exe started!”。然后连接了finished signal,其主要动作是再次调用p->start(). 但是注意,这里的start()是不带参数的。在两次connect结束之后,调用 p->start("notepad.exe"); 以启动笔记本程序。connect中的p->start()之所以没有参数,就是因为在它后面调用的start是有参数的。而再次start的话,是可以不再注明参数的。
void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus)当进程结束的时候,该signal会被发射出去。exitCode就是进程的退出码,而exitStatus就是退出状态。
若在一个系统服务中,想保持另一个进程始终处于运行状态(比如某server),那么就可以connect这个finished信号。详细代码如下:
void keepProcessRunning()
{
QProcess* p = new QProcess();
QObject::connect(p, &QProcess::started, [] () {
qDebug() << "Notepad.exe started!";
});
// Keep restarting if notepad.exe is finished
QObject::connect(p, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
[p] (int exitCode, QProcess::ExitStatus exitStatus) {
qWarning() << "Notepad.exe was terminated! "
<< "Exit code: " << exitCode
<< "Exit status: " << exitStatus;
// restart
qWarning() << "Notepad.exe will restart... ";
p->start();
});
p->start("notepad.exe");
}
以上代码中,先连接了started() signal,但这仅仅是为了打印一条语句“Notepad.exe started!”。然后连接了finished signal,其主要动作是再次调用p->start(). 但是注意,这里的start()是不带参数的。在两次connect结束之后,调用 p->start("notepad.exe"); 以启动笔记本程序。connect中的p->start()之所以没有参数,就是因为在它后面调用的start是有参数的。而再次start的话,是可以不再注明参数的。
相关文章推荐
- android-利用broadcast双程序相互监控保证目标程序运行
- 局部QEventLoop帮助QWidget不消失(也就是有一个局部事件循环始终在运行,导致程序被卡住那里,但仍可以接受事件。说白了就是有一个while语句死活不肯退出,直到收到退出信号)
- 利用HTTP协议和IE的漏洞在其他计算机上运行一个程序
- MainForm关闭之后保持程序运行
- 如何利用缓冲区溢出的程序错误来运行黑客程序
- 利用Cookie和Session保持WEB客户端始终在线
- C#利用Mutex实现只运行一个程序实例
- C#利用Mutex实现只运行一个程序实例
- 利用Salamander .Net Linker生成可脱离.net framework环境运行的程序
- 让数据库中始终保持N条记录.程序代码实现 dorado
- 如何利用Vbs运行外部程序?
- C/C++中利用空指针(NULL),提高程序运行效率
- 利用组策略限制P2P软件(防止更改文件名称运行程序)
- ◎Vbs脚本编程简明教程之四—如何利用Vbs运行外部程序?
- 利用飞信虚拟机,在没有.net环境的机子上运行C#程序(不是打包方法)
- 利用HTTP协议和IE的漏洞在其他计算机上运行一个程序
- 利用注册表限制特定程序运行―注册表使用全攻略之十四
- 如何让安装程序运行时自动将.net framework安装到目标机器
- 利用Cookie和Session保持WEB客户端始终在线
- 利用timer()测试程序运行速度starttime=timer()