Java - jna从Java调用本机循环,并从其他函数停止它

java-JNA call a native loop from Java and stop it from an other function

本文关键字:Java 其他 函数 循环 jna 调用 本机      更新时间:2023-10-16

我想启动一个用c++编写的循环,直到我要求它(从Java)停止。即:

(c++)
void loop(){
   while(!stop){
     // do something
   }
}
Java:

MyLib.INSTANCE.loop();

则调用如下代码:MyLib.INSTANCE.stop = true;

虽然您可以访问共享库的全局变量(NativeLibrary.getGlobalVariableAddress()),但最好是定义一个专用函数来做您想做的事情(即MyLib.stop())。

你还需要注意你的代码是多线程感知的,这样编译器就不会认为你的循环的stop不能改变,从而优化它。你还需要确保你的循环不会独占CPU;如果你想让你的"停止"代码能够运行,它需要不时地屈服。