CLOCK_BOOTTIME返回的时间不是单调的

时间:2014-09-26 10:30:03

标签: android android-ndk clock

在我的项目中,我面临着一个奇怪的问题。在我的设备下面代码返回"测试失败"信息。有时这种情况会立即发生,有时会在短时间内发生,但总是如此。

int main()
{
    while(true)
    {
            static unsigned long long previous;
            timespec time;
            int ret = clock_gettime(CLOCK_BOOTTIME, &time);
            if(0 != ret)
            {
                    return 1;
            }

            unsigned long long current = time.tv_sec * 1000000000llu;
            current += time.tv_nsec;

            if(current < previous)
            {
                    std::cerr << "test failed. time stepped back." << std::endl;
                    return 1;
            }
            previous = current;

    }
    return 0;
}

此代码可能出现什么问题?测试了android 4.2.2。

1 个答案:

答案 0 :(得分:1)

  

unsigned long long current = time.tv_sec * 1000000000llu;

tv_sec是32位宽。在乘法之前,你必须将它转换为无符号多长时间。