timespec
संरचना दो भागों में समय का प्रतिनिधित्व करता है - सेकेंड और नैनोसेकंड। इस प्रकार, मिलीसेकंड से रूपांतरण के लिए एल्गोरिदम बहुत आसान सरल है। एक सेकंड में हजार मिलीसेकंड होते हैं, एक मिलीसेकंड में एक हजार माइक्रोसॉन्ड होते हैं और एक माइक्रोसेकंड में हजारों नैनोसेकंड होते हैं, जिसके लिए हम SI का आभारी हैं। इसलिए, हमें पहले कई सेकंड प्राप्त करने के लिए मिलीसेकंड को हजारों तक विभाजित करने की आवश्यकता है। कहें, उदाहरण के लिए, 1500 मिलीसेकंड/1000 = 1.5 सेकंड। पूर्णांक अंकगणित (एक फ़्लोटिंग प्वाइंट नहीं) दिया गया है, शेष गिरा दिया गया है (यानी 1500/1000 केवल 1 के बराबर है, 1.5 नहीं)। फिर हमें एक ऐसा शेष लेने की आवश्यकता है जो कई मिलीसेकंडों को दर्शाती है जो निश्चित रूप से एक सेकंड से भी कम है, और इसे एक लाख से गुणा करके इसे नैनोसेकंड में परिवर्तित करने के लिए गुणा करें। 1000 से विभाजित करने के लिए, हम module operator (%
) (यानी 1500 % 1000 is equal to 500
) का उपयोग करते हैं। उदाहरण के लिए, सेकंड और नैनोसेकंड को 4321 मिलीसेकेंड में परिवर्तित करते हैं:
- 4321 (मिलीसेकेंड)/1000 = 4 (सेकंड)
- 4321 (मिलीसेकेंड)% से लेकर 1000 = 321 (मिलीसेकेंड)
- 321 (मिलीसेकेंड) * 1000000 =00000 (नैनोसेकंड)
उपर्युक्त को जानने के लिए, केवल एक चीज जो शेष है, वह थोड़ा सी कोड लिखना है। ऐसी कुछ चीजें हैं जिन्हें आपने सही नहीं किया:
- सी में, आपको
struct
के साथ संरचना डेटा प्रकारों को उपसर्ग करना होगा। उदाहरण के लिए, timespec
कहने के बजाय आप struct timespec
कहते हैं। सी ++ में, हालांकि, आपको यह करने की ज़रूरत नहीं है (दुर्भाग्य से, मेरी राय में)।
- आप सी में फ़ंक्शन से संरचनाएं वापस नहीं कर सकते हैं। इसलिए, आपको उस फ़ंक्शन में पॉइंटर द्वारा संरचना को पास करने की आवश्यकता है जो उस संरचना के साथ कुछ करता है।
ठीक है, पर्याप्त बात कर रही है। नीचे एक सरल सी कोड उदाहरण है:
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
static void ms2ts(struct timespec *ts, unsigned long ms)
{
ts->tv_sec = ms/1000;
ts->tv_nsec = (ms % 1000) * 1000000;
}
static void print_ts(unsigned long ms)
{
struct timespec ts;
ms2ts(&ts, ms);
printf("%lu milliseconds is %ld seconds and %ld nanoseconds.\n",
ms, ts.tv_sec, ts.tv_nsec);
}
int main()
{
print_ts(1000);
print_ts(2500);
print_ts(4321);
return EXIT_SUCCESS;
}
उम्मीद है कि यह मदद करता है। शुभ लाभ!
स्रोत
2013-02-22 14:27:06
एचएम, या तो time.h ठीक से शामिल नहीं किया गया था या कहीं ऊपर अर्धविराम गायब है। – KBart
अच्छी तरह से, यह मामला नहीं है।मैं पहले से ही पूरे कोड से गुजर चुका हूं और ऐसी कोई गलती नहीं मिली है। :-( –
आपके कोड में कई त्रुटियां हैं। कोई 'टीवी' घोषित नहीं किया गया है जिसे आप वापस करने का प्रयास करते हैं (मुझे लगता है कि आप इसके बजाय' req' वापस करना चाहते हैं)। 'Req' एक सूचक नहीं है लेकिन आप इसे एक्सेस करने का प्रयास करते हैं '->' के माध्यम से। और आपको 'timespec' के बजाय 'struct timespec' वापस करना होगा। – scai