c++ - 开始调用后发出的QProcess信号?
问题描述
在对象start()
上调用之后QProcess
,可以遵循的信号发射序列是什么started
,errorOccurred
和finished
?
(started
信号总是发射吗?finished
信号总是发射吗?三个信号中至少有一个总是发射吗?如果errorOccurred
发射,可以在它之后发射一个started
或finished
信号吗?)
解决方案
当您为 QProcess 对象调用 start() 时,一旦您的进程启动,就会发出启动信号。如果您的流程中发生任何错误,errorOccurred将发出,并且在您的流程完成后,将调用完成的信号。但是 Finished 信号总是在几秒钟后发出,因此如果您需要运行一系列命令,您可以使用更快的方式而不是使用如下所示的 finished 信号:
QProcess *system_command = new QProcess();
system_command->start("/bin/bash");
system_command->waitForFinished(500);
system_command->write("ls -a\n");
更新:
不,顺序并不总是相同的。如果您的进程成功启动并且没有返回错误,它将发出启动信号。现在,如果您的进程运行的程序未完成或正在等待某个命令,则在该进程成功完成之前不会发出完成的信号(它可能永远不会发出完成的信号)。
如果您的进程遇到错误,errorOccured将发出,但启动和完成信号不会发出。
例子:
如果您使用 QProcess 运行 bash,它只会发出启动信号,而永远不会发出完成信号。因为它正在等待其他命令。
system_command->start("/bin/bash");
但是,如果您使用要立即运行的所有命令运行 bash,它将运行并发出完成信号(如果没有发生错误)。
readtimedatectl->start("/bin/sh", QStringList() << "-c" << "timedatectl");
推荐阅读
- node.js - azure webapp 节点默认启动脚本
- c# - 自定义访客模式实现
- javascript - React native Refresh 有效,但下一次调用仍使用最后一个令牌
- regex - perl 或 sed 命令查找 2 个字符串并将第一个字符串替换为字符串 2
- excel - VBA MS Word 表格创建
- c# - 单击按钮时禁用 wpf winow
- powershell - 获取外部对象的属性
- windows-services - 通过 Windows 服务启动的应用程序会引发错误。“文件无法写入缓存”
- python - 从本地目录安装 python 包并删除该目录
- android - 如何在 Android 应用程序中检索图像的 url?