![](/img/trans.png)
[英]communicating Java application and C++ process using posix ipc message queues
[英]Dead-simple POSIX C++ IPC
我感興趣的是一個c ++ linux-only(可能放寬到posix-only)的IPC解決方案,其行為如下; 啟動了一個名為“計算器”的程序,可以收聽消息。 計算器將有一個循環,定期檢查消息字符串,然后根據其內容對其進行操作。
另一個名為'send_msg'的程序可以向其pid發送消息(理想情況下是主機名/ pid,通過tcp或udp)。
$ calculator &
// awhile later
$ send_msg <calculator pid> show calculations
Calc1: 52% complete
Calc2: 21% complete
$ send_msg <calculator pid> alter Calc2 <numeric parameters>
Ok! I'm restarting my calculations!
$
我非常精通c ++,但對網絡編程一無所知,也不想花很多時間來學習它。 是否有一個易於使用的c ++包,可以做到這一點? 我寧願不必選擇端口號,文件位置等等。
我想,你要求的設置不過是簡單的。
對於背景計算器和前端之間的通信,您可能最好使用Unix域套接字或TCP套接字(端口號)。 因此,例如,您可能會運行:
calculator -p 3456 &
然后計算器正在偵聽端口3456.然后,您的send_msg
程序可用於使計算器執行以下操作:
send_msg -p 3456 show calculations
當計算器收到消息時,它根據命令行動,將答案發送回套接字上的send_msg
程序,然后將其回送到其標准輸出。
同時,你有一個可能需要多線程的計算器。 它還需要能夠確定每次計算涉及的工作量,以便它可以報告每次計算的進度。 你和我都沒有說明如何設置計算,但它可能是:
send_msg -p 3456 new calc.file
表示計算器應該開始一個新的計算,從文件calc.file
讀取問題。 它可能會回應:
Calc1: ETC = 3:15
其中,通過一些或多或少的狡猾手段,它確定預計完成時間(ETC)為3分15秒。 您可以以類似的方式設置第二個計算。 要處理此問題,您需要一個偵聽來自send_msg
連接的控制器線程。 當它被告知創建一個新作業時,它會啟動一個新線程(或進程)來進行計算。 計算器中的主線程與實際計算線程之間必須有一些商定的機制。 這可能就像每個線程寫入進度並且主要讀取的位置一樣簡單。 但計算線程需要跟蹤他們完成了多少工作,剩下多少工作,以及是否需要更改估算。
現在,我可能會把事情弄得太復雜,但是你展示的界面表明可能需要類似的東西。 如果您對計算器進行單線程處理,則必須對您設置的每個計算進行某種循環調度,並定期檢查send_msg
程序是否發送了新消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.