Java 安卓4.2和时钟时间

Java 安卓4.2和时钟时间,java,android,c,android-ndk,java-native-interface,Java,Android,C,Android Ndk,Java Native Interface,我使用这些函数来测量执行一个函数需要多少毫秒: struct timespec diff_timespec(struct timespec start, struct timespec end) { struct timespec result; if (end.tv_nsec < start.tv_nsec) { result.tv_nsec = 1000000000 + end.tv_nsec - start.tv_nsec;

我使用这些函数来测量执行一个函数需要多少毫秒:

struct timespec diff_timespec(struct timespec start, struct timespec end)
{
     struct timespec result;

     if (end.tv_nsec < start.tv_nsec)
     { 
        result.tv_nsec = 1000000000 + end.tv_nsec - start.tv_nsec;        
        result.tv_sec = end.tv_sec - 1 - start.tv_sec;
     }
     else
     {
        result.tv_nsec = end.tv_nsec - start.tv_nsec;        
        result.tv_sec = end.tv_sec - start.tv_sec;
     }

    return result;
}

long long nanosec_elapsed(struct timespec diff)
{
    return ((long long)diff.tv_sec * 1000000000) + (diff.tv_nsec );
}
我遇到的问题是,有时,(delta1+delta2+delta3)和delta之间存在很大的差异。换句话说,函数A报告需要T1毫秒来执行B,函数B本身报告需要T2毫秒……但T1和T2有时相距太远,以至于我开始质疑我的测量是否有效

此外,我正在测量的任务之一是发送UDP数据

根据以上述方式执行的测量,发送一小包UDP数据有时需要5毫秒以上。我的日志摘录:

It took 9.552002 ms to send 100 bytes to server
It took 23.071289 ms to send 124 bytes to server
It took 4.791260 ms to send 128 bytes to server
It took 6.134032 ms to send 86 bytes to server
It took 10.589599 ms to send 100 bytes to server
It took 6.591797 ms to send 117 bytes to server
It took 3.173829 ms to send 117 bytes to server

谁能给我一个合理的解释吗?

一个思想时钟获得时钟时间。如果操作系统决定切换到另一个应用程序(可能是因为另一个应用程序正在使用网卡,因此它还无法处理您的请求),那么您的应用程序回到最前沿可能需要一个未知的时间。这就是分析器将时钟时间、系统时间和用户时间分开的原因。因此,ms范围内的任何时间对于任何函数都不是不合理的。特别是那些必须写入网络的代码。那么我如何衡量执行代码所花费的实际时间呢?(没有等待时间、睡眠时间、由于上下文切换而引入的时间等)检查手册页中的
clock\u gettime()
以查看时钟列表。你有
CLOCK\u REALTIME
(“墙上的时钟”时间),当网络更新设备上的时钟时,它可以跳转<代码>时钟是单调的,不会跳跃;和
CLOCK\u THREAD\u CPUTIME\u ID
,它只在线程使用CPU时前进。Dalvik“traceview”方法评测使用最后两种方法。还有一个类似于单调的独立源,但当设备进入低功耗睡眠时,其行为会有所不同。所以我应该使用CLOCK\u THREAD\u CPUTIME\u ID??
It took 9.552002 ms to send 100 bytes to server
It took 23.071289 ms to send 124 bytes to server
It took 4.791260 ms to send 128 bytes to server
It took 6.134032 ms to send 86 bytes to server
It took 10.589599 ms to send 100 bytes to server
It took 6.591797 ms to send 117 bytes to server
It took 3.173829 ms to send 117 bytes to server