EA&UML日拱一卒-多任务编程超入门-(13)启动和终止进程

进程通信的范围非常大,也有很多的方法。其中的有些方法甚至可以单独成书。本系列使用几个小程序进行尽量简单的说明。今天首先说明启动和终止另外一个进程。


被调用端代码


int main(int, char*[])
{
   
string msg;
   
while(msg != "BYE")
   
{
       
cin >> msg;
       
transform(msg.begin(), msg.end(),
                 
msg.begin(), ::toupper);
       
cout << msg << endl;
   
}
}


代码很简单,从标准输入读入字符串,转换为大写,然后输出。

如果输入的字符串转为大写以后是“BYE”则程序退出。


调用端代码


int main(int /*argc*/, char */*argv*/[])
{
   
QProcess server;
   
server.start("G:\\Qt\\21070809 ProcessComm\\ServerProcess\\bin\\debug\\ServerProcess.exe"
                 ,QStringList());
     if (!server.waitForStarted())
       
return false;
     server.write("bye");
   
server.closeWriteChannel();
     if (!server.waitForFinished())
       
return false;

   
QByteArray result = server.readAll();
   
cout << result.constData();
    
return 0;
}


看不全的部分是文件名,不用太在意。

这部分代码利用了QT的QProcess类来操作进程。大致分为以下几步:


  1. 指定文件名和参数调用start方法来启动一个进程

  2. 调用waitForStarted方法来等待进程启动成功

  3. 向进程写入“bye”字符串,指示线程退出

  4. 关闭写通道

  5. 调用waitForFinished方法等待线程退出

  6. 取得进程返回的数据并输出,这里我们可以得到一个“BYE”


这个例子程序包含了进程操作通信的基本要素,是今后一段时间实例的基础。


写在文章的最后


既然已经读到这里了,拜托大家再用一分钟时间,将文章转发到各位的朋友圈,微信群中。


本公共号的成长需要您的支持!
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】
EA&UML日拱一卒-多任务编程超入门-(13)启动和终止进程