Есть ли способ заставить родной поток выйти через JNI? - PullRequest
1 голос
/ 10 июня 2010

У меня есть программа, которая использует двоичные библиотеки FFMPEG через JNI. Есть вызов, чтобы открыть URL, который блокирует собственный код, и мне нужно разрешить пользователю вручную отменить это соединение. Иногда Thread.interrupt () работает точно так же, как и должен (если URL, к которому я подключаюсь, это «udp: // {любой тип}») Если мой URL-адрес "rtp: // {что угодно}", Thread.interrupt (), по-видимому, не учитывается собственной нитью. Thread.kill (), кажется, даже не делает этого (и вообще все равно недоволен).

Кто-нибудь знает другой способ прервать или убить собственный поток через JNI?

Ответы [ 2 ]

2 голосов
/ 14 июня 2010

Посмотрите, как это делает Xuggle (JNI-ваппер для FFmpeg). Каждый раз, когда FFmpeg вызывает обратный вызов прерывания, Xuggler вызывает Java, чтобы увидеть, был ли поток прерван, и если да, возвращает true.

1 голос
/ 10 июня 2010

Собственный код может регулярно проверять поток на предмет его прерывания, как это делает Java-код.

Другой подход зависит от операционной системы, но вы можете отправить вам поток сигнала, и этот сигнал может установить флаг - это может быть более простым для проверки на стороне JNI.

Вся остановка потока является кооперативной - вы указываете потоку остановиться, устанавливая флаг (через Thread.interrupt() или флаг, установленный в обработчике сигналов), и код потока проверяет это часто.

...