2011-02-18 12 views

Respuesta

1

Suena un poco complicado, ya que se supone que JNI es unidireccional: el código Java puede invocar un método nativo, que por supuesto puede volver a llamar al código Java, pero no puede iniciar el proceso.

Pero no es imposible, creo que la solución más directa es tener una llamada nativa que bloquee hasta que se reciba la señal.

Otra opción sería escribir un agente JVMTI, que puede interferir activamente con una VM en ejecución.

Pero si hablamos de señales UNIX, puede manejarlas con la API no pública (por lo tanto no está garantizada en el futuro y específica de Sun VM) pero existe la clase sun.misc.Signal.

-1

Puede llamar a un método Java desde el código C. Ver la documentación de JNI. Consulte también http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html.

+0

Ya estoy usando esto, pero lo que realmente necesito es algo, donde puedo bloquear algún recurso en Java y luego puedo enviar un evento/señal para desbloquearlo y que debe ser asincrónico. –

+0

Sin duda, puede obtener un puntero de entorno en C junto con un identificador de objeto, que luego puede ser notificado simplemente, siempre que el puntero de entorno siga siendo válido después de la invocación de la función Java ->. –

Cuestiones relacionadas