跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请问有人知道 c++里面 time(0) 获取时间会有异常的情况吗?
未分類
14 1 月 2021

请问有人知道 c++里面 time(0) 获取时间会有异常的情况吗?

请问有人知道 c++里面 time(0) 获取时间会有异常的情况吗?

資深大佬 : zuoanyx 2

之前做一个嵌入式设备的开发,用 C/C++,需要获取系统时间,只需要整秒数就可以了,所以就直接用这种

time_t currtime = time(0);

来获取时间,这个获取时间的代码是在单独的一个线程里以 while(1) 的 loop 进行的,当然也有 sleep,且不排除在其他线程中会存在 time(0) 同时获取系统时间。

后来在打印的日志中发现一个问题,就是这个获取的秒数(每间隔 10s 获取一次)一直都很正常,但是会有出现突然某一次获取的秒数是一个明显的异常值,转换为年月日的话会差了好几年。time()这个函数应该也是线程安全的,所以目前还是没有搞清楚出现这个情况的原因,有哪位大神清楚不?求助

大佬有話說 (10)

  • 資深大佬 : linux40

    线程安全是 POSIX 的要求。

  • 資深大佬 : wevsty

    突然出现某个数字异常,你应该检查一下是不是存在内存越界的情况。

  • 主 資深大佬 : zuoanyx

    @wevsty 内存越界之前是检查过了的,应该是 ok 的,就是这个数字异常一般表现为之前获取了 1000 次都是正常的值,类似 1611715150,突然有一次获取为 1525415140,之后又获取了 1000 此也都是正常值

  • 資深大佬 : owenliang

    嵌入式的,咱不好说。

  • 資深大佬 : Huelse

    嵌入式不太清楚,但 c++我一般会用 chrono 库,http://www.cplusplus.com/reference/chrono/

  • 資深大佬 : Huelse

    C 的话可以看这个 http://www.cplusplus.com/reference/ctime/time/

  • 資深大佬 : tienhua

    分析这种问题最好给出日志和代码

  • 資深大佬 : laminux29

    还有 std::clock()在虚拟化系统里经常出问题。

    这两个问题的本质是,现在高阶 c++,时间处理方面,大多数转用 chrono 了,就算 chrono 有问题,因为用的人多,处理快,解决方案多。

    而 time()、std::clock()这种,正好相反,现在基本上很少有人用了,更新后遗留 bug 或出问题,没人解决,也就很正常了。

    IT 界这种问题很多,比如安卓,这系统一开始很烂,很多基本组件与功能都缺失。但是架不住用户多,各种缺失组件与功能,居然陆陆续续地被非官方开发者,解决地差不多了…

  • 資深大佬 : js8510

    c++ clock 有两种。一种是 wall clock 一种是 chrono clock. chrono clock 是从机器起来之后开始 count 是可以准确的计算时间差的。wall clock 顾名思义,就是世界的时间。问题是一分钟不是 60s,当润分钟的时候是 61 秒。所以他是不能用来准确计算时间差的。

  • 資深大佬 : zhongrs232

    把业务逻辑全干掉,写一个 main 函数,里面只保留获取时间的代码,看看有没有问题,按我的经验,怀疑编译器,系统调用,标准库有问题,一般都会被打脸,另外,你有没有用到类似 ctime/gmtime 之类的函数,这些函数不是线程安全的

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具