gpt4 book ai didi

java - 安卓 NDK 计时器

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:48 26 4
gpt4 key购买 nike

我用 c 编写了一段代码来计算一段 C 代码花费了多长时间,然后尝试将它报告回 Java 代码。但问题是定时器差分总是返回为零。这是原生 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,"according to difftime(), 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() 一起使用的。

关于java - 安卓 NDK 计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7165863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com