gpt4 book ai didi

c - C中函数 "localtime"的异常行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:19 25 4
gpt4 key购买 nike

我通过输入相同的参数来使用函数 localtime 两次。但是,我可能会得到不同的结果。后一个可能会多一秒钟。代码如下。

ptCurrentTime = localtime(&(t_TriggerTime));
ptCurrentTime = localtime(&(t_TriggerTime));

我打印了结果。第一个可能像 2015-11-07 22:19:56.123,第二个可能像 2015-11-07 22:19:57.123。这正常吗?

最佳答案

不,发生这种变化是不正常的。通常只有在以下情况下您才应该获得不同的值:

  • t_TriggerTime 改变;或
  • 如果您的时区发生变化(并且时区很少改变一秒,他们往往更喜欢每小时或半小时跳跃);或
  • 您的 localtime() 函数中存在严重错误;或
  • 您正在运行多个线程并且正在更改共享状态。

最后一点值得研究。如果其他一些执行线程也在调用时间函数,localtime() 通常会返回一个内部对象的地址,该对象可以在您不知情的情况下进行修改。

如果事实证明这是问题所在,多线程系统可能会提供一种线程安全的变体,它使用您提供 的对象而不是共享的内部对象。例如,

struct tm tms;
struct tm *ptms = localtime_r (&t_TriggerTime, &tms);
// ptms is now &tms, so use ptms->X (or tms.X).

但是,我也会非常彻底地检查您的打印代码,标准 struct tm 没有亚秒级分辨率的概念,所以我不知道您的 .123 来自.

关于c - C中函数 "localtime"的异常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31910967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com