C中函数“localtime”的异常行为

时间:2015-08-10 02:47:17

标签: c linux gcc embedded-linux

我通过输入相同的参数两次使用函数MaterialTextfield.prototype.init()。 但是,我可能得到不同的结果。后者可能还有一秒钟。代码如下。

localtime

我打印出结果。第一个可能像ptCurrentTime = localtime(&(t_TriggerTime)); ptCurrentTime = localtime(&(t_TriggerTime)); ,第二个可能像2015-11-07 22:19:56.123。 这是正常的吗?

1 个答案:

答案 0 :(得分:4)

不会发生这种变化是不正常的。在下列情况下,通常只能获得不同的值:

  • 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来自哪里。< / p>