सी ++ 11 में, *_until
टाइमआउट फ़ंक्शंस केवल "अपेक्षित" व्यवहार करते हैं, यदि केवल एक स्थिर घड़ी (यानी, जो केवल एक अपरिवर्तनीय दर पर आगे बढ़ता है) का उपयोग किया जाता है। क्योंकि system_clock
एक स्थिर घड़ी नहीं है, इसका मतलब है कि इस तरह से है कि कोड काफी आश्चर्यजनक रूप से व्यवहार करते हैं कर सकते हैं:संबंधित * _for फ़ंक्शन के बजाय सी ++ 11 * _until टाइमआउट फ़ंक्शन का उपयोग करना उचित कब है?
using namespace std::chrono;
std::this_thread::sleep_until(system_clock::now() + seconds(10));
यह वर्तमान धागा 10 सेकंड के लिए सोने के लिए कारण होगा, जब तक कि सिस्टम घड़ी नींद की अवधि के दौरान निकाला जाता है, जैसे, डेलाइट बचत समय के लिए। अगर घड़ी नींद के दौरान एक घंटा वापस सेट की जाती है, तो वर्तमान धागा एक घंटे और 10 सेकंड तक सो जाएगा।
मैं जो कह सकता हूं, से प्रत्येक *_until
सी ++ 11 में टाइमआउट फ़ंक्शन में *_for
फ़ंक्शन है जो एक टाइमपॉइंट की बजाय अवधि लेता है। उदाहरण के लिए, इस प्रकार उपरोक्त कोड में लिखा जा सकता:
using namespace std::chrono;
std::this_thread::sleep_for(seconds(10));
*_for
काम करता है, घड़ियों है कि जब समारोह निष्पादित हो रहा है एडजस्ट हो जाते हैं के बारे में चिंता करने के लिए, क्योंकि वे सिर्फ कितनी देर तक प्रतीक्षा करने के लिए, यह नहीं कह नहीं होना चाहिए क्या जब प्रतीक्षा खत्म हो जाती है तो ऐसा लगता है।
यह समस्या नींद कार्यों से अधिक प्रभावित करती है, क्योंकि यह टाइमआउट-आधारित वायदा और try_lock कार्यों पर प्रतीक्षा करता है।
केवल स्थिति है जिसमें मैं यह कल्पना कर सकते हैं एक अस्थिर घड़ी के साथ एक *_until
फ़ंक्शन का उपयोग किया जाएगा जब आप चाहते खाते में घड़ी समायोजन लेने के लिए, उदाहरण के लिए, आप 3 पर अगले बुधवार तक सोना चाहता हूँ अर्थ निकालने: 30AM, भले ही डेलाइट बचत समय में या उसके बीच में कोई बदलाव हो। क्या ऐसी अन्य स्थितियां हैं जहां *_until
फ़ंक्शंस *_for
फ़ंक्शंस से अधिक समझ में आता है? यदि नहीं, तो क्या यह कहना सुरक्षित है कि, सामान्यतः *_for
टाइमआउट फ़ंक्शंस को *_until
फ़ंक्शंस पर प्राथमिकता दी जानी चाहिए?
क्या यह _clock_ की _steadiness_ पर निर्भर नहीं होगा? क्या 'wait_for' और 'wait_until' वास्तव में' घड़ी कूद 'के संचालन में अलग-अलग काम करने का इरादा रखते हैं? –
@ के-बॉलो: ठीक है, यही कारण है कि मैंने विशेष रूप से घड़ी की स्थिरता का उल्लेख किया और वह system_clock स्थिर नहीं है। '_for' और' _until' फ़ंक्शंस घड़ी समायोजन के संबंध में अलग-अलग व्यवहार करते हैं, लेकिन _intention_ मुझे क्या स्पष्ट नहीं है। – KnowItAllWannabe
'system_clock' का _steadiness_ वास्तव में कार्यान्वयन निर्भर है। –