当我使用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()时,值会被更改,但在某个时刻完成循环之前,它会更新另一次,即使没有时间调用。
答案 0 :(得分:0)
我会尝试拨打time(0)
而不是传递地址。我不知道time()
的内部结构,但是当您传递地址时,该值必须存储两次。传递0可以避免这种情况。