2011-11-21 212 views
2

我正在調用駐留在Java線程的dll中的C函數。此C函數無限期地運行並實時處理視頻幀,併爲每個幀輸出結果。從java中訪問全局C變量

我想生成另一個Java線程來讀取處理函數的結果而不中斷函數。我還需要實現某種線程控制以防止讀取損壞的數據。

任何想法?

+0

你目前如何調用C函數? –

+0

以及我還沒有實現它,我已經準備好了C函數並打算使用JNI來調用它 – kidhuvig

+0

你在windows上嗎?因爲從DLL的角度來看「全局」變量實際上很少是全局的。有時它們對每個人都是全球性的,但通常它們僅限於每個進程甚至每個線程。 –

回答

0

您可以將C函數嵌入到將由您的java線程啓動的可執行文件中。 C函數可以將結果發佈到管道中或通過套接字將它們發送到您的java線程。這使您可以靈活地在一臺機器上運行C函數,在另一臺機器上運行Java線程。

1

全局由您的C環境控制。

我懷疑你應該這樣做:

  1. 創建返回全局變量的值的函數,並使用JNI從Java調用它。
  2. 實現你的同步的東西C.
+0

是的,這是解決方案,謝謝。 – kidhuvig