java – Android NDK定时器

前端之家收集整理的这篇文章主要介绍了java – Android NDK定时器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在c中写了一段代码来计算C代码的一段时间,然后尝试将其回报给 Java代码.但是问题是定时器差动总是回到0.这里是本地C
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> /* sleep() */
#include <time.h>
#include <jni.h>

jstring Java_com_nsf_ndkfoo_NDKFooActivity_invokeNativeFunction(JNIEnv* env,jobject javaThis) {

    time_t start,end;

    start = time(NULL);
    if(start == (time_t)-1) {
      return 1;
    }

    sleep(5);

    end = time(NULL);

    char buf[60] = { 0 };

    sprintf(buf,"according to difftime(),slept for %.8f seconds\n",(int)difftime(end,start));

    return (*env)->NewStringUTF(env,buf);
}

当我运行这个我总是得到“根据difftime(),睡了-0.00000000秒”.任何想法有什么问题?

——————————–最终代码解决方案————— —————————————–

这是我发现终于不知道为什么我不是一个C大师,但在这里反正.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> /* sleep() */
#include <sys/time.h>
#include <jni.h>

jstring Java_com_nsf_ndkfoo_NDKFooActivity_invokeNativeFunction(JNIEnv* env,jobject javaThis) {

    struct timeval start;
    struct timeval end;

    gettimeofday(&start,NULL);
    sleep(5);

    gettimeofday(&end,NULL);

    char buf[60] = { 0 };

    sprintf(buf,slept for %ld seconds\n",((end.tv_sec * 1000000 + end.tv_usec) - (start.tv_sec * 1000000 + start.tv_usec)));

    return (*env)->NewStringUTF(env,buf);
}

android的Java代码看起来像这样:

package com.nsf.ndkfoo;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;

public class NDKFooActivity extends Activity {
    // load the library - name matches jni/Android.mk
    static {
        System.loadLibrary("ndkfoo");
    }

    // declare the native code function - must match ndkfoo.c
    private native String invokeNativeFunction();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // this is where we call the native code
        String hello = invokeNativeFunction();

        new AlertDialog.Builder(this).setMessage(hello).show();
    }
}

解决方法

尝试使用gettimeofday()来衡量时间.我已经成功地使用它与NDK,虽然在我的情况下它是与pthread_cond_timedwait().
原文链接:https://www.f2er.com/android/125694.html

猜你在找的Android相关文章