Ich schreibe ein Java-Programm, das einen in c geschriebenen Hardwaretreiber verwendet. Dieser Hardware-Treiber startet einen Callback-Thread und Sie können Callback-Funktionen registrieren, die aufgerufen werden, wenn etwas passiert. Wie kann ich diesen Thread an den jvm anhängen, so dass er die Java-Methoden für diese Rückrufe aufrufen kann? Ich habe nur die Thread-ID zurückgegeben von der Funktion start_callbacks(), zurückgegeben als ein int, aber es ist die pthread_t im Aufruf von pthread_create() verwendet.Drittanbieter-Thread an vm anschließen, wenn jni verwendet wird
Eine Möglichkeit, die ich gefunden habe, ist, pthread_once am Anfang jeder Callback-Funktion zu verwenden und den Thread dort anzuhängen. Aber dann gibt es keine Möglichkeit, es zu lösen. Ich habe versucht, pthread_cleanup_push/pop zu verwenden, aber sie müssen als ein Paar aufgerufen werden, das hat nicht funktioniert.
Es scheint mir, dass meine einzige Option, dieses Recht zu tun, ist das Anhängen und Trennen des Threads bei jedem Callback-Aufruf. Oder den Treiber etwas umschreiben, was ich wirklich nicht machen möchte.
Gibt es etwas, das ich vermisst habe?
Das ist wahrscheinlich nicht hilfreich, aber haben Sie in Erwägung gezogen, das Programm in C zu implementieren und System.exec oder etwas zu verwenden, um es mit Java zu verbinden? Ihr aktueller Ansatz erscheint mir technisch riskant. –