Как отправить события / сигнал с C на Java в JNI - PullRequest
8 голосов
/ 18 февраля 2011

Существует ли какой-либо механизм для отправки асинхронных событий / сигналов через JNI из C в Java или наоборот? Мне нужно поймать сигнал / событие от C до Java.

Ответы [ 2 ]

1 голос
/ 19 февраля 2011

Звучит немного хитро, поскольку JNI должен быть только односторонним: код Java может вызывать собственный метод, который, конечно, может вызывать обратно в код Java, но не может сам инициировать процесс.

Но это не невозможно, я думаю, что самое простое решение состоит в том, чтобы иметь собственный вызов, который блокирует до получения сигнала.

Другой вариант - написать агент JVMTI, который может мешать работеактивно работающая ВМ.

Но если мы говорим о сигналах UNIX, то вы можете работать с непубличным API (поэтому не гарантируется в будущем и не зависит от Sun VM), но с существующим sun.misc.Signal класс.

0 голосов
/ 19 февраля 2011

Вы можете вызвать метод Java из кода C. Смотрите документацию JNI. Смотри также http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html.

...