1. 程式人生 > >【Qt】Qt之程序間通訊(QProcess)【轉】

【Qt】Qt之程序間通訊(QProcess)【轉】

簡述

前幾節裡,分享了程序通訊的幾種方式: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); } }

命令列讀取

說明

程序B-命令列讀取

  1. 在main函式中初始化QApplication以後,獲取命令列引數。
  2. 命令列引數中包含當前程式的名稱、接收的引數等資訊。

實現

QStringList cmdLineArgs = QCoreApplication::arguments();
QMessageBox::information(NULL, QStringLiteral("ReceiveMessage"), cmdLineArgs.join(" "));

更多參考

相關推薦

QtQt程序通訊QProcess

簡述 前幾節裡,分享了程序通訊的幾種方式:Windows訊息機制、Shared Memory(共享記憶體),本節講解下關於程序通訊的另外一種方式-QProcess。 簡述 命令列讀取 說明 實現 更多參考 命令列引數啟動 說明 程序A-帶參啟動

QtQt程序通訊IPC

簡述 程序間通訊,就是在不同程序之間傳播或交換資訊。那麼不同程序之間存在著什麼雙方都可以訪問的介質呢?程序的使用者空間是互相獨立的,一般而言是不能互相訪問的,唯一的例外是共享記憶體區。但是,系統空間卻是“公共場所”,所以核心顯然可以提供這樣的條件。除此以外,那就是雙方都可以訪問的外設了。在這個意義上,兩

Qt 程序通訊QProcess

簡述 QProcess可以在應用程式內部與其它程序通訊,或啟動其它應用程式。與在終端機之類的命令輸入視窗上使用名稱和引數是一樣的,可以使用QProcess提供的函式start()啟動程序。可以註冊QStringList處理程序後的引數。 | 命令列引數啟

Linux環境程序通訊 訊號燈()

轉自http://www.ibm.com/developerworks/cn/linux/l-ipc/part4/, 作者:鄭彥興訊號燈與其他程序間通訊方式不大相同,它主要提供對程序間共享資源訪問控制機制。相當於記憶體中的標誌,程序可以根據它判定是否能夠訪問某些共享資源,同時,程序也可以修改該標誌。除了用於訪

QtQt程序通訊Windows訊息

簡述 通過上一節的瞭解,我們可以看出程序通訊的方式很多,今天分享下如何利用Windows訊息機制來進行不同程序間的通訊。 效果 傳送訊息 自定義型別與接收窗體 包含所需庫,定義傳送的自定義型別、接收訊息的窗體標題。自定義型別可以處理訊息過多情況下,對訊息的區分,如果不需要也可以去掉。

QtQt程序通訊共享記憶體

簡述 上一節中,我們分享下如何利用Windows訊息機制來進行不同程序間的通訊。但是有很多侷限性,比如:不能跨平臺,而且必須兩個程序同時存在才可以,要麼程序A發了訊息誰接收呢? 下面我們來分享另外一種跨平臺的進行間通訊的方式-Shared Memory(共享記憶體)。 簡述 注意事項

QT程序程序通訊IPC

程序是作業系統的基礎之一。一個程序可以認為是一個正在執行的程式。我們可以把程序當做計算機執行時的一個基礎單位。關於程序的討論已經超出了本章的範疇,現在我們假定你是瞭解這個概念的。 在 Qt 中,我們使用QProcess來表示一個程序。這個類可以允許我們的應用程式開啟一個新的外部程式

Linux程序通訊IPC訊號量詳解與測試用例

學習環境centos6.5 Linux核心2.6 程序間通訊概述 1. 程序通訊機制 一般情況下,系統中執行著大量的程序,而每個程序之間並不是相互獨立的,有些程序之間經常需要互相傳遞訊息。但是每個程序在系統中都有自己的地址空間,作業系統通過頁表

Linux程序通訊IPC訊息佇列詳解及測試用例

學習環境 Centos6.5 Linux 核心 2.6 什麼是訊息佇列? 訊息佇列是SystemV版本中三種程序通訊機制之一,另外兩種是訊號量和共享儲存段。訊息佇列提供了程序間傳送資料塊的方法,而且每個資料塊都有一個型別標識。訊息佇列是基於訊息的,而管

Qt 程序通訊Windows 訊息

簡述 通過上一節的瞭解,我們可以看出程序通訊的方式很多,今天分享下如何利用Windows訊息機制來進行不同程序間的通訊。 | 效果 傳送訊息 自定義型別與接收窗體 包含所需庫,定義傳送的自定義型別、接收訊息的窗體標題。自定義型別可以處理

Linux程序通訊IPC共享記憶體詳解與測試用例

學習環境centos6.5 Linux核心2.6 什麼是共享記憶體 共享記憶體允許兩個或更多程序訪問同一塊記憶體。當一個程序改變了這塊記憶體中的內容的的時候,其他程序都會察覺到這個更改。 效率: 因為所有程序共享同一塊記憶體,共享記憶體在各種程序

作業系統程序通訊C#

程序間通訊命名管道程序間通訊的一種方式,Pipes:管道,分為無名管道:在父子程序間交換資料;有名管道:可在不同主機間交換資料,分為伺服器方和客戶方,在Win9X下只支援有名管道客戶。命名管道的命名命名管道是一個有名字的,單向或雙向的通訊管道。管道的名稱有兩部分組成:計算機名

Qt程序通訊--------QProcess

       Qt提供了一個QProcess類用於啟動一個外部程式並與之通訊。啟動一個新程序的操作十分簡單,只需要將待啟動的程式名稱和啟動引數傳遞給start()函式即可。 m_pPro = new

Linux程序通訊IPC方式總結

程序間通訊概述 程序通訊的目的 資料傳輸  一個程序需要將它的資料傳送給另一個程序,傳送的資料量在一個位元組到幾M位元組之間 共享資料  多個程序想要操作共享資料,一個程序對共享資料 通知事件 一個程序需要向另一個或一組程序傳送訊息,通知它(它們)

程序通訊命名管道fifo

要學習命名管道,我們必須首先對管道的特性有一定的瞭解,管道特性以及匿名管道連結 命名管道:管道的一個限制就是隻能用在親緣程序之間,如果我們想在不相關的程序間進行資料交換,可以使用FIFO檔案來進行,它叫做命名管道。 命名管道:檔案系統可見,是一個特殊型別(管道型別)的檔案。命名管

程序通訊共享記憶體

概念: 共享記憶體區是最快的IPC形式。⼀一旦這樣的記憶體對映到共享它的程序的地址空間,這些程序間資料傳遞不再 涉及到核心,換句話說是程序不再通過執⾏行進⼊入核心的系統調⽤用來傳遞彼此的資料。 共享記憶體中的函式: shmget函式: 功能:⽤用來建立共享記憶體 原型

Android IPC程序通訊 Binder連線池

Binder管家之Binder連線池 IPC程序間通訊(四)之AIDL中的AIDL由一個Service進行管理,若是建立10個AIDL業務模組是不是也要建立10個Service來進行管理,那100個呢?顯然繁瑣,怎麼辦麼,用Binder連線池呀! 工作機制: 1.每個業務模組建立其AID

Android IPC程序通訊Socket

網路通訊之Socket 特點:功能強大,可通過網路傳輸位元組流,支援一對多併發即時通訊。 不支援RPC。 服務端實現: public class SorviceSocket extends Service { private static final String TAG

Androi IPC程序通訊ContentProvider

程序間通訊之ContentProvider 一,介紹 1.底層實現也是Binder 2.其6個方法除了onCreate方法運行於主執行緒,其他4個方法由外界回撥並運行於Binder執行緒池。 3.註冊ContentProvider需要一個屬性android:authorities=“XX

Android IPC程序通訊AIDL

AIDL-Android介面定義語言 一· 1.相比於Messenger AIDL可跨程序呼叫方法。 2.支援資料型別: (1) Java 的原生基本型別(int, long, char, boolean, double等) (2)String 和CharSequence (3) Arr