मैंने सी में कोड का एक टुकड़ा लिखा है ताकि गणना की जा सके कि सी कोड का एक भाग कितना समय ले रहा था, फिर उसे जावा कोड पर रिपोर्ट करने का प्रयास किया। लेकिन समस्या यह है कि टाइमर अंतर हमेशा शून्य के रूप में वापस आता है। यहां देशी सीएंड्रॉइड एनडीके टाइमर
#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 के अनुसार(), -०.०००००००० सेकंड के लिए सोया" है। कोई विचार क्या गलत है?
-------------------------------- अंतिम कोड समाधान --------- -----------------------------------------------
यह वही है जो मैंने पाया है अंततः यह सुनिश्चित नहीं करता कि क्यों मैं सी गुरु नहीं हूं लेकिन यहां वैसे भी है। इस तरह एंड्रॉयड दिखता है के लिए
#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);
}
जावा कोड:
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();
}
}
हम केवल उपयोग सवाल यहाँ संभाल, देव सवालों पर जाना [अतः]। –