【Qt】Qt之进程间通信(QProcess)【转】

来源:互联网 发布:北京网络电视台直播 编辑:程序博客网 时间:2024/05/30 04:41
简述

前几节里,分享了进程通信的几种方式:Windows消息机制、Shared Memory(共享内存),本节讲解下关于进程通信的另外一种方式-QProcess。

 

  • 简述
  • 命令行参数启动
    • 说明
    • 实现
  • 命令行读取
    • 说明
    • 实现
  • 更多参考

 

命令行参数启动

说明

进程A-带参启动进程B

  1. 一般编写程序时,严格来说,启动外部程序,需要判断版本是debug还是release。否则,有可能会造成错误。
  2. 判断将要启动的进程是否存在,如果不存在,则启动;否则,不启动。
  3. 传参:这里我列举的是json格式。

实现

void onSendMessage(){    QString strExe("");    if (m_pProcess == NULL)        m_pProcess = new QProcess(this);#if defined(QT_DEBUG)    strExe = "ReceiveMessaged.exe";#   else    strExe = "ReceiveMessage.exe";#  endif    // 判断进程是否存在    QProcess tasklist;    tasklist.start("tasklist",                   QStringList() << "/NH"                   << "/FO" << "CSV"                   << "/FI" << QString("IMAGENAME eq %1").arg(strExe));    tasklist.waitForFinished();    QString strOutput = tasklist.readAllStandardOutput();    if (!strOutput.startsWith(QString("\"%1").arg(strExe)))    {        QJsonObject json;        json.insert("UserName", QStringLiteral("╰☆一去、二三里`"));        json.insert("Password", "123456");        QJsonDocument document;        document.setObject(json);        QByteArray byteArray = document.toJson(QJsonDocument::Compact);        QStringList arguments;        arguments << byteArray;        m_pProcess->startDetached(strExe, arguments);    }}

 

<code class="language-Qt hljs avrasm has-numbering"> </code>

命令行读取

说明

进程B-命令行读取

  1. 在main函数中初始化QApplication以后,获取命令行参数。
  2. 命令行参数中包含当前程序的名称、接收的参数等信息。

实现

<code class="language-Qt hljs lasso has-numbering">QStringList cmdLineArgs <span class="hljs-subst">= QCoreApplication<span class="hljs-tag">::arguments();QMessageBox<span class="hljs-tag">::information(<span class="hljs-built_in">NULL, QStringLiteral(<span class="hljs-string">"ReceiveMessage"), cmdLineArgs<span class="hljs-built_in">.<span class="hljs-keyword">join(<span class="hljs-string">" "));</span></span></span></span></span></span></span></span></code>

更多参考


原文作者:一去丶二三里作者博客:去作者博客空间
0 0
原创粉丝点击