1

c で書かれたハードウェア ドライバを使用する Java プログラムを書いています。このハードウェア ドライバーはコールバック スレッドを開始し、何かが発生したときに呼び出されるコールバック関数を登録できます。このスレッドを jvm にアタッチして、これらのコールバックの Java メソッドを呼び出せるようにするにはどうすればよいですか? start_callbacks() 関数から返されたスレッド ID のみが int として返されますが、これは pthread_create() の呼び出しで使用される pthread_t です。

私が見つけた 1 つの方法は、すべてのコールバック関数の開始時に pthread_once を使用し、そこにスレッドをアタッチすることです。しかし、それを切り離す方法はありません。pthread_cleanup_push/pop を使用しようとしましたが、ペアとして呼び出す必要があるため、機能しませんでした。

これを正しく行うための唯一のオプションは、コールバック呼び出しごとにスレッドをアタッチおよびデタッチすることだと私には思えます。または、ドライバーを多少書き直しますが、これは本当にやりたくないことです。

私が逃したものはありますか?

4

2 に答える 2

2

それこそが、JNI が呼び出し、目的AttachCurrentThread()DetachCurrentThread()するものです。

于 2012-04-06T06:45:18.253 に答える