私は、Cコードのセクションがどれくらいの期間、Javaコードに戻ってきたかを計算するために、cでコードを書きました。しかし、問題は、タイマーの差が常にゼロとして戻ってくることです。私はこれを実行すると、ここでネイティブCは、私は常に取得Android NDKタイマー
#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);
}
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();
}
}
私たちは、ここでしか利用状況に関する質問を扱うには、DEVの質問に行く[SO]。 –