2011-05-18 67 views
1

我想了解什麼機制是從我寫到Java供用戶界面使用的C++守護進程獲取字符串。我會發布什麼,我想要的圖像,然後繼續這個問題後:std :: strings隊列需要通過JNI的共享內存?

enter image description here

有跡象表明,我設想這裏兩個問題:

1)信號必須提供給圖書館。在Windows中,這可以通過命名的信號量來完成,並可以訪問它的句柄。在Linux中,我一直指向在共享內存中使用信號量,並通過共享內存的密鑰使進程意識到它。這對我來說很模糊,但是這個概念是否可以同步Java和守護進程?

2)我必須將隊列放在共享內存中才能使???鏈接在上面的圖表中工作嗎?可以並且應該將隊列駐留在.so?

所以這些是我的顧慮。我熱愛並歡迎任何和所有的幫助,挑戰和理智的懇求,並會盡我所能提供所有額外必要的信息。提前致謝。

+0

使用套接字(可能是UNIX域)執行此任務可能會容易得多,而忘記了JNI。 – 2011-05-18 23:24:06

+0

或管道,如果你對它們更舒服。 – 2011-05-18 23:44:08

+0

我在嵌入式環境中使用控制卡管理擴展卡的多個telnet接口。 Java層被添加爲從基於瀏覽器的UI獲取數據到用C++編寫的底層硬件控制軟件的手段。它可能不夠高雅,但我進入了這個項目的後期設計。如果可能很困難,是否可行? – 2011-05-19 05:14:02

回答

0

您正在一個單獨的進程中運行這兩個應用程序,在vanilla Linux中,這意味着您無法直接通過內存在這些進程之間進行通信。 Java VM是一個進程,C++守護進程是一個進程。它位於由內存管理器(MMU)加密的單獨內存位置。所以沒有辦法獲得內存訪問。

谷歌在「內部流程溝通」,如果你願意。我更喜歡使用socketpair來進行雙向父 - 母通信。