昨天的例子,完成了进程的启动和终止。接下来我们对这个例子稍加修改,完成进程间的对话功能。
示例代码
被调用侧的代码和昨天文章中的完全相同,这里只说明调用侧的代码。
#include <QCoreApplication>
#include <QProcess>
#include <QTextStream>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QProcess server;
server.start("G:\\Qt\\21070809 ProcessComm\\ServerProcess\\bin\\debug\\ServerProcess.exe"
,QStringList());
if (!server.waitForStarted())
return -1;
QTextStream cin(stdin);
QTextStream cout(stdout);
QByteArray input;
QByteArray response;
while(input != "bye\n")
{
cin >> input;
input += "\n";
server.write(input);
server.waitForReadyRead();
response = server.readLine();
response.replace("\r\n", "");
cout << response << endl;
}
if (!server.waitForFinished())
return -1;
return a.exec();
}
和昨天代码不同的主要是while循环中的部分。代码内容如下:
-
从键盘输入字符串
-
在字符串结尾添加字符‘\n’
-
向进程写入该字符串
-
等待进程反馈信息就绪
-
取得反馈信息
-
去掉反馈信息中的"\r\n"
-
输出反馈信息
如果输入字符串为"bye"则退出循环,否则循环继续。
麻雀虽小,五脏俱全
这个例子,代码虽然不多,但是包含了进程相关的几乎所有的内容:进程启动,进程终止,进程同步,进程通讯。架构已经有了,要完成读者需要的功能,只要添加内容就可以了。
写在文章的最后
既然已经读到这里了,拜托大家再用一分钟时间,将文章转发到各位的朋友圈,微信群中。
本公共号的成长需要您的支持!
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】