调用ctime的time(),c ++中不可预测的行为

时间:2014-07-07 22:35:04

标签: c++ visual-studio-2012

当我使用ctime lib工作时,我注意到一个我无法理解的奇怪错误。过了一会儿,我明白ctime是我遇到麻烦的原因。使用time()函数时,我的代码行为变得不可预测。以下是我写的示例代码:

1:    #include <ctime>
2:    #include <iostream>
3:    int main(int argc, char argv[])
4:    {
5:       std::cout << "Prova" << std::endl;
6:       time_t  timer1, timer2;
7:       timer1 = time(&timer1);
8:       timer2 = time(&timer2);
9:       while (true){
10:         double leak = difftime(timer2, timer1);
11:         std::cout << "Sleep: " << leak * 1000 << std::endl;
12:         time(&timer1);
13:         time(&timer2);
14:      }
15:      return 0;
16:   }

当尝试调试它时,istructons遵循以下顺序:... 7 - &gt; 8 - &gt; 7 - &gt; 8 - &gt; 10 - &gt; 11 - &gt; 10 - &gt; 11 - &gt; 12 - &gt; 13 - &gt; 14 - &gt; 8 ...为什么7号和8号重复两次?怎么能在前一段时间跳? 我在Windows 7 64位上使用Visual Studio 2012。仅当我在发布模式下构建时才会发生此行为。在调试模式下一切正常。 会是什么呢?有些东西我不知道或者我误会了什么?

编辑: 这与我的工作代码类似。

void System::Run()
{
    time_t  timer1, timer2;
    timer1 = time(&timer1);
    timer2 = time(&timer2);
    while(!mbDone)
    {
      double leak = difftime(timer2, timer1); //I didn't check that is less than 50, but without wait the video go over 40/50 fps
      Sleep(50 - (leak * 1000)); //<- first time I'm expecting to wait nearly 50ms
      time( &timer1 );

      //Other work in between that work fine before
      //Grab image
      //Process image
      //Show image

      time(&timer2);
    }
}

从调试器中我看到,当调用time()时,值会被更改,但在某个时刻完成循环之前,它会更新另一次,即使没有时间调用。

1 个答案:

答案 0 :(得分:0)

我会尝试拨打time(0)而不是传递地址。我不知道time()的内部结构,但是当您传递地址时,该值必须存储两次。传递0可以避免这种情况。