googling timeval
this first result दें। उस पृष्ठ से:
टाइप स्ट्रक्चर टाइमवल या स्ट्रक्चर टाइमपेक के दो मानों को घटाना अक्सर आवश्यक होता है। ऐसा करने का सबसे अच्छा तरीका यहां दिया गया है। यह कुछ असाधारण ऑपरेटिंग सिस्टम पर भी काम करता है जहां tv_sec सदस्य के पास एक हस्ताक्षरित प्रकार है।
# define timercmp(a, b, CMP) \
(((a)->tv_sec == (b)->tv_sec) ? \
((a)->tv_usec CMP (b)->tv_usec) : \
((a)->tv_sec CMP (b)->tv_sec))
आप timersub()
की जरूरत है:
/* Subtract the `struct timeval' values X and Y,
storing the result in RESULT.
Return 1 if the difference is negative, otherwise 0. */
int
timeval_subtract (result, x, y)
struct timeval *result, *x, *y;
{
/* Perform the carry for the later subtraction by updating y. */
if (x->tv_usec < y->tv_usec) {
int nsec = (y->tv_usec - x->tv_usec)/1000000 + 1;
y->tv_usec -= 1000000 * nsec;
y->tv_sec += nsec;
}
if (x->tv_usec - y->tv_usec > 1000000) {
int nsec = (x->tv_usec - y->tv_usec)/1000000;
y->tv_usec += 1000000 * nsec;
y->tv_sec -= nsec;
}
/* Compute the time remaining to wait.
tv_usec is certainly positive. */
result->tv_sec = x->tv_sec - y->tv_sec;
result->tv_usec = x->tv_usec - y->tv_usec;
/* Return 1 if result is negative. */
return x->tv_sec < y->tv_sec;
}
टिप के लिए धन्यवाद, लेकिन मैं पहले से ही कोड का उपयोग कर रहा हूं। वास्तव में, मुझे एहसास हुआ कि मेरी समस्या क्या थी। Google की जांच के लिए धन्यवाद, शायद यह पहली बात है जिसे मैंने उत्तर के रूप में पोस्ट किया होगा। =) –
स्पष्टीकरण के लिए, मुझे एहसास हुआ कि समय-समय पर 'tv_sec' और' tv_usec' मान होने के लिए समय-समय पर प्रारंभ किया गया था। कतारों को ठीक से शुरू करने के लिए 'gettimeofday() 'का उपयोग करके समस्या को हल किया गया। सहायता का शुक्रिया। =) –
2 एशेलली, मैं जोड़ूंगा, कि आईएमएचओ दूसरी स्थिति को 'x-> tv_usec - y-> tv_usec> = 1000000' को बदलने के लिए बेहतर है ताकि '5/1000000' से' 6/0'। – Kolyunya