Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Pthread,终止JNI创建的线程_Java_C++_Multithreading_Java Native Interface_Pthreads - Fatal编程技术网

Java Pthread,终止JNI创建的线程

Java Pthread,终止JNI创建的线程,java,c++,multithreading,java-native-interface,pthreads,Java,C++,Multithreading,Java Native Interface,Pthreads,在我们的项目中,有些代码是本机代码,由JNI调用,因此除非我们决定并行运行一些调用,否则一切看起来都很好,但问题是(不清楚的事情)要么通过Java运行线程,要么通过pthread运行线程 我们更喜欢pthread,因为它具有更好的管理和功能,但问题是 假设一个本机代码启动一个pthread,那么我们需要pthread引用,以便用另一个方法取消/退出线程,所以第一个问题是,我如何将pthread id重新解压缩到java代码中,是否可能,pthread id是否为int native int st

在我们的项目中,有些代码是本机代码,由JNI调用,因此除非我们决定并行运行一些调用,否则一切看起来都很好,但问题是(不清楚的事情)要么通过Java运行线程,要么通过pthread运行线程

我们更喜欢pthread,因为它具有更好的管理和功能,但问题是

假设一个本机代码启动一个pthread,那么我们需要pthread引用,以便用另一个方法取消/退出线程,所以第一个问题是,我如何将pthread id重新解压缩到java代码中,是否可能,pthread id是否为int

native int start_thread();
下一个问题是,是否可以将Java对象(接口)传递给pthread而不是本机方法?像这样的

native int start_thread(pthread_start ref);//where pthread_start is a java interface with one method, like Runnable
最后一个问题是,一旦获得pthread引用,是否可以将其传递给另一个本机方法以退出/取消它

native void kill_thread(int pthread_id);

只要在本机代码中“新建”pthread\t结构,就可以在Java中存储指向pthread\t结构的指针

有了这个指针,您就可以调用本机代码进行线程管理(join、kill)

同样,在启动线程时,可以传递对Java对象的引用,该引用将作为指针到达本机代码中。虽然我不建议直接从pthread_create调用调用Java函数(即Runnable),但您可以将Java对象指针传递到本机线程例程,本机线程例程反过来可以通过正常的JNI调用调用Java方法