【发布时间】:2019-11-11 23:47:03
【问题描述】:
我在这里找到了https://stackoverflow.com/a/12901159/6655884 一个函数调用,它使用AttachCurrentThread 附加线程,执行调用,然后使用DetachCurrentThread 将其分离。
我想知道这个过程是否成本高昂。我有一个 C++ 函数
void sendEvent(Event event) {
//call java function here
}
它将被多个 C++ 线程调用以将事件发送到 Java 端,因此我不能简单地附加一个线程并且从不分离它,因为许多不同的线程将调用sendEvent。所以我想知道在每次sendEvent 调用时执行AttachCurrentThread、调用Java 和DetachCurrentThread 是否成本高昂。如果是,我应该怎么做?
【问题讨论】:
-
可以设置线程析构回调,在线程被销毁时将线程与JVM分离。请参阅stackoverflow.com/questions/30026030/… 的最后部分注意,使用最新的 NDK 版本,您可以使用
thread_locals 以更少的代码完成同样的事情。 -
附加和分离线程是昂贵的操作,在恶劣的条件下可能会花费您数十毫秒的时间。在您的情况下,最好使用某种预附加线程池或一个带有任务队列的附加线程
标签: java android c++ java-native-interface