在我的项目中,我面临着一个奇怪的问题。在我的设备下面代码返回"测试失败"信息。有时这种情况会立即发生,有时会在短时间内发生,但总是如此。
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。
答案 0 :(得分:1)
unsigned long long current = time.tv_sec * 1000000000llu;
tv_sec是32位宽。在乘法之前,你必须将它转换为无符号多长时间。