Pthread,杀死JNI创建的线程
Pthread, kill the thread has created by JNI
在我们的项目中,一些代码是本机代码,由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中,只要您在本地代码中"新建"它即可。
使用该指针,您可以回调到用于线程管理(join、kill)的本地代码中。
同样,当您启动线程时,您可以传递对Java对象的引用,该引用将作为指针到达本机代码中。虽然我不建议尝试直接从pthread_create调用调用Java函数(即Runnable),但您可以将Java对象指针传递给本地线程例程,后者可以通过普通的JNI调用调用Java方法。
相关文章:
- 两个线程一个使用流 Api,另一个线程创建文件失败并出现错误ERROR_SHARING_VIOLATION
- C++ 线程创建/删除与线程停止/恢复
- Qt - 如何从线程创建 QFuture
- 我可以使用Qt线程ID为每个线程创建唯一的缓存吗?
- 零MQ 后台线程创建
- OpenMP 线程创建
- GLFW & ImGui:从 main 以外的线程创建 ImGui 控件
- 对象:无法为位于不同线程中的父线程创建子级
- C++ 11:线程创建给我一个"Attempt to use a deleted function"错误
- C 的周期性线程创建
- MPI - 当数组初始化值必须为常量时,如何为工作线程创建部分数组
- 当主GUI线程被阻塞时,如何从工作线程创建无模式对话框
- 多个线程创建5个线程来计算质数
- 为线程创建模板
- 线程创建,CRT和DLL是如何完成的?
- 同步线程创建和销毁(静态)对象
- 竞争条件:一个线程创建静态对象,另一个线程在初始化完成之前使用它.如何处理
- 从不同线程创建QMainWindow
- QFuture 无法为位于不同线程中的父线程创建子级
- ( QNativeSocketEngine)QObject:无法为位于不同线程中的父线程创建子级