यहां एक छोटा सा परीक्षण है जिसे मैंने यह सत्यापित करने के लिए लिखा है कि वास्तव में केवल लिनक्स में ही आगे बढ़ता है।लिनक्स पर पीछे की ओर चलने से समय कैसे रोकें?
#include <time.h>
#include <sys/time.h>
bool timeGoesForwardTest2()
{
timeval tv1, tv2;
double startTime = getTimeSeconds(); // my function
while (getTimeSeconds() - startTime < 5)
{
gettimeofday(&tv1, NULL);
gettimeofday(&tv2, NULL);
if (tv2.tv_usec == tv1.tv_usec &&
tv2.tv_sec == tv1.tv_sec)
{
continue; // Equal times are allowed.
}
// tv2 should be greater than tv1
if (!(tv2.tv_usec>tv1.tv_usec ||
tv2.tv_sec-1 == tv1.tv_sec))
{
printf("tv1: %d %d\n", int(tv1.tv_sec), int(tv1.tv_usec));
printf("tv2: %d %d\n", int(tv2.tv_sec), int(tv2.tv_usec));
return false;
}
}
return true;
}
परीक्षण परिणाम के साथ विफल रहता है।
tv1: 1296011067 632550
tv2: 1296011067 632549
ummm ....
इस क्यों होता है?
Linux version 2.6.35-22-generic ([email protected]) (gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu4)) #33-Ubuntu SMP Sun Sep 19 20:34:50 UTC 2010 (Ubuntu 2.6.35-22.33-generic 2.6.35.4)
... running inside VirtualBox 3.2.12, in Windows 7.
इसे वीएम के साथ करना पड़ सकता है। क्या आपने इसे वास्तविक लिनक्स इंस्टॉल के साथ करने का प्रयास किया है? –
सुनिश्चित करें कि आप tv_sec और tv_usec पर पूर्णांक रोलओवर की जांच कर रहे हैं जब भी उनके साथ कोई गणना कर रहे हों। –
मुझे संदेह है क्योंकि यह समय आपके सीपीयू पर दो अलग-अलग कोरों पर जाता है और उनमें से एक लघु ब्लैक होल के आसपास है।घर से निकल जाओ। जितनी जल्दी हो सके आप कर सकते हैं। गंभीरता से! – paxdiablo