Java JNI减速意外

时间:2015-05-21 11:38:50

标签: java c++ java-native-interface raspberry-pi jniwrapper

我正在尝试在Raspberry Pi中为RCSwitch实现一个java包装器。它工作正常,直到抓取方法达到第80次迭代。然后它放慢速度,我无法弄清楚原因。使用值返回需要超过5分钟。 我试图找出问题所在,但我并没有记忆,树莓仍然有超过300mega。尽管如此,我尝试使用以下参数运行JVM:-Xms5m -Xmx5m但程序在第80次迭代时仍然放慢速度,所以我认为它不是内存问题。我的发送者仍然发送该值,因为如果我重新启动程序它再次工作直到第80次迭代,所以这不是缺少输入数据。

以下是代码的java部分:

public class RCSwitchWrapper {
    public native int recievedValue(int PIN);
    static{System.loadLibrary("RCSwitchWrapper");}

    public static void main(String[] args){
        RCSwitchWrapper wrapper = new RCSwitchWrapper();
        int counter=0;
        while(true){
            counter++;
            int grabbedData = wrapper.recievedValue(2);
            System.out.println(counter+" grabbed data: "+grabbedData);
        }
    }
}

代码的C ++部分:

#include "RCSwitch.h"
#include "RCSwitchWrapper.h"
#include <stdlib.h>
#include <stdio.h>
#include <iostream>

RCSwitch mySwitch;
JNIEXPORT jint JNICALL Java_RCSwitchWrapper_recieveValue(JNIEnv *env, jobject obj,jint PIN){
    if(wiringPiSetup()==-1){
        printf("wiringpi error \n");
        return 0;
    }
    mySwitch = RCSwitch();
    mySwitch.enableReceive(PIN);
    while(1){
        if(mySwitch.available()){
            int value = mySwitch.getReceivedValue();
            return value;
        }
        mySwitch.resetAvailable();
        return(-1);        
    }
} 

现在我很困惑,无法想出解决方案。

提前致谢。

0 个答案:

没有答案