我正在編寫一個使用c中編寫的硬件驅動程序的Java程序。這個硬件驅動程序啓動一個回調線程,並且你可以註冊回調函數,當有事情發生時被調用。如何將此線程附加到jvm,以便它可以調用這些回調的Java方法?我只有從start_callbacks()函數返回的線程ID,作爲int返回,但是它是調用pthread_create()時使用的pthread_t。使用jni時將第三方線程連接到vm
我發現的一種方法是在每個回調函數的開始處使用pthread_once並在那裏附加線程。但是,那麼沒有辦法將它分開。我試圖使用pthread_cleanup_push/pop,但是它們需要作爲一對來調用,因此不起作用。
在我看來,我唯一的選擇就是在每個回調調用中附加和分離線程。或者有點重寫驅動程序,我真的不想這樣做。
有什麼我錯過了嗎?
這可能是無益的,但你有沒有考慮在C中實現程序,並使用System.exec或其他東西將它連接到Java?您目前的做法在技術上似乎對我有風險。 – 2012-04-06 02:38:24