【问题标题】:How to share progress updates through JNI?如何通过 JNI 分享进度更新?
【发布时间】:2013-04-02 16:02:00
【问题描述】:

如何在 Java 中显示用 C++ 完成的计算的进度?

java 应用程序通过 JNI 调用 C++ 方法,我如何在 java 应用程序和 C++ 方法之间共享一个 double progress;

我真的不知道 JNI 中是如何处理多线程的。

此外,目标平台是 Windows 和 Linux。

【问题讨论】:

  • 我认为你不需要共享内存,你只需要从 C++ 调用一个 Java 方法并传递一个双精度 currentProgress / total 这会给你一个 0-1 范围内的双精度值.
  • @ddriver 我正在调用 c++ 代码 来自 Java。第一次调用将启动算法(在新线程上,java 或 C++)。现在,按照您的建议,如果两个线程彼此不认识,第二个调用如何访问currentProgress 变量?
  • @ddriver 或者,我这样说,你建议调用一个方法来访问currentProgress。你的建议我没有遵循的是:谁在修改这个currentProgress,因此,谁在运行实际的计算?

标签: java c++ multithreading java-native-interface shared-memory


【解决方案1】:

有多种方法可以报告从本机端到 Java 的进度。

一种是通过 JNI 从 C++ 调用 Java 对象的方法。您可以在 C++ 计算方法本身或其他方法中传递对象。

另一种是与直接 ByteBuffer 共享内存区域。在 Java 中,调用 ByteBuffer.allocateDirect() 来创建缓冲区。将缓冲区传递给 C++,然后使用 GetDirectBufferAddress() 获取其内存地址。在 C++ 中,直接写入缓冲区。在 Java 中,轮询更改。

【讨论】:

  • 啊,这就是@ddriver 的建议。我会试试的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 2018-06-13
相关资源
最近更新 更多