私はcで書かれたハードウェアドライバを使用するJavaプログラムを作成しています。このハードウェアドライバは、コールバックスレッドを開始し、何かが起きたときに呼び出されるコールバック関数を登録できます。これらのコールバックのためにJavaメソッドを呼び出すことができるように、このスレッドをjvmにどのように付加できますか? start_callbacks()関数から戻されたスレッドIDはintとして返されますが、pthread_create()の呼び出しで使用されるのはpthread_tです。jniを使用するときにサードパーティのスレッドをVMに接続する
私が見つけた1つの方法は、すべてのコールバック関数の開始時にpthread_onceを使用し、そこでスレッドをアタッチすることです。しかし、それを切り離す方法はありません。私はpthread_cleanup_push/popを使用しようとしましたが、ペアで呼び出されなければ動作しませんでした。
この権利を行う私の唯一の選択肢は、コールバックコールごとにスレッドをアタッチして切り離すことです。または、私が実際にやりたくないドライバをいくらか書き換えます。
私が見逃したことはありますか?
これはおそらく役に立たないかもしれませんが、Cでプログラムを実装し、System.execなどを使ってJavaに接続すると考えましたか?あなたの現在のアプローチは技術的に危険なようです。 –