2011-03-08 83 views
3

請幫忙,我該如何組織進程 - 進程間數據交換(在Windows中,如果有的話)?C++下的跨進程交互

我有process1.exe它調用process2.exe幾個命令行參數。我想從process1(例如,一些int值)跟蹤「進度」process2。它(int值)可以從process1永久訪問或每個X毫秒 - 無所謂。

有用的任何解決方案:WinApi或Qt。

謝謝大家!所有答案都非常有用! :) 非常感謝!!

回答

5

OTOH:

  • 標準輸入/輸出重定向
  • 命名管道(CreateNamedPipe時)
  • 匿名管(CreatePipe)
  • 插座(插座,連接,結合)
  • 共用存儲器(的CreateFileMapping ,MapViewOfFile)
  • Windows消息(例如WM_APP)

選擇一個 - Windows消息或共享內存可能更容易。

1

您可以簡單地使用Windows Api(SendMessage)發送消息。

4

有很多選擇,在這裏:

  1. 您可以重定向過程2的標準輸出和擁有它但往往你喜歡
  2. 如果使用標準輸出別的東西輸出更新,你可以使用一個named pipe流程
  3. 您還可以使用named shared memory,這將需要更少的開銷,可能會更容易實現之間(的缺點是,你可能還需要執行跨進程同步)
  4. 如果過程1運行一個消息泵,那麼你也可以使用普通的Windows消息(看WM_COPYDATA)
3

有幾種方法:

  • 套接字
  • 消息
  • 共享內存(文件)

問題是Process2將廣播,Process1將會收聽。 Process1需要知道Process2何時完成,可能完成的百分比。

我相信套接字將是更好的路線,但這取決於應用程序,開發計劃和概念的熟悉程度。

1

到目前爲止提出的選項中一個明顯的漏掉是COM。我期待着通常的「COM是廢話」的反應,但根據我的經驗,情況並非如此。

+0

+1。並且在計算機(也是IPC的一種形式)的COM中還擴展了DCOM。 – 0xC0000022L 2011-03-08 02:43:42