32位linux下使用gettimeofday获取毫秒一直返回负数记录
之前为了测试C++中代码执行消耗的时间,所以写了这么一个函数:long long __getmstime(){timeval tv;gettimeofday(&tv, NULL);return tv.tv_sec * 1000 + tv.tv_usec / 1000;}之前只是做减法算相差时间,今天突然做了一次输出__getmstime的时间,发现居然是负数,3
·
之前为了测试C++中代码执行消耗的时间,所以写了这么一个函数:
long long __getmstime()
{
timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
之前只是做减法算相差时间,今天突然做了一次输出__getmstime的时间,发现居然是负数,
32位的机器使用long long类型不可能会结果溢出,于是我使用了double类型,依然如此,觉得很奇怪。
但是这种表现一定是溢出啊。
这时想到了C++的类型自动转换,tv.tv_sec * 1000这里的计算应该没有进行类型转换,之后会得到一个
溢出的负数,之后返回的时候虽然强转成了Long long,但是已经悲剧了,诶。
最后改改:
long long __getmstime()
{
timeval tv;
gettimeofday(&tv, NULL);
return ((long long)tv.tv_sec) * 1000 + tv.tv_usec / 1000;
}
先把tv.tv_sec转成long long类型,这样就不会造成溢出了。
看来基本功是不扎实呀=。=
更多推荐
已为社区贡献1条内容
所有评论(0)