की स्थिति प्राप्त करें क्या यह जांचना संभव है कि std::future
समाप्त हो गया है या नहीं? जहां तक मैं इसे करने का एकमात्र तरीका बता सकता हूं, शून्य अवधि के साथ wait_for
पर कॉल करना होगा और जांच करें कि स्थिति ready
है या नहीं, लेकिन क्या कोई बेहतर तरीका है?एक std :: भविष्य
उत्तर
आप सही हैं, और अतीत में एक समय के साथ wait_until
पर कॉल करने के अलावा (कोई समकक्ष नहीं है) कोई बेहतर तरीका नहीं है।
तुम हमेशा एक छोटे से आवरण लिख सकता है अगर आप एक और अधिक सुविधाजनक वाक्य रचना चाहते हैं:
template<typename R>
bool is_ready(std::future<R> const& f)
{ return f.wait_for(std::chrono::seconds(0)) == std::future_status::ready; }
N.B. यदि फ़ंक्शन को स्थगित कर दिया गया है तो यह कभी भी सही नहीं होगा, इसलिए शायद wait_for
को उस मामले में जांचना बेहतर होगा जहां आप एक निश्चित समय बीतने के बाद या सिस्टम लोड कम होने के बाद स्थगित रूप से स्थगित कार्य को चलाने के लिए चाहते हैं।
wait_for भविष्य को म्यूटेट नहीं करता है इसलिए पैरामीटर को कॉन्स्ट के रूप में घोषित किया जा सकता है। –
अगर पहले से ही कॉल किया गया था या भविष्य को कभी शुरू नहीं किया गया था तो रन टाइम त्रुटियों से बचने के लिए पहले वैध() को जांचने पर विचार करें। –
क्या प्रतीक्षा_for (chrono :: सेकंड (0)) तुरंत लौटने की गारंटी है या कुछ कार्यान्वयन पर कुछ मिलीसेकंड के लिए धागे का नियंत्रण प्राप्त कर सकता है? यह जानना बहुत महत्वपूर्ण होगा क्योंकि कुछ मिलीसेकंड एक गेम को कोड करते समय बहुत समय है ... – kynnysmatto
मेरी पहली शर्त के साथ एक 0 अवधि wait_for
कहते हैं, और परिणाम कोड कि future_status::ready
में से एक, future_status::deferred
या future_status::timeout
हो सकता है की जांच करने के लिए होगा।
cppreference में वे कहते हैं कि valid()
चेकों का दावा करता है, तो परिणाम उपलब्ध है, लेकिन मानक का कहना है कि valid()
true
वापस आ जाएगी अगर *this
एक साझा राज्य को संदर्भित करता है कि क्या है कि राज्य तैयार है या नहीं की स्वतंत्र रूप से,।
cppreference अब अपडेट कर दिया गया है और यह बताता है कि "भविष्य में कोई साझा स्थिति है या नहीं"। (सुनिश्चित नहीं है कि आप अपना दूसरा पैराग्राफ हटाना चाहते हैं या इसे संपादित करना चाहते हैं, इसलिए मैं इसे स्वयं संशोधित नहीं करूंगा)। – Default
std :: भविष्य के लिए is_ready सदस्य फ़ंक्शन in the works है। इस बीच, वीसी कार्यान्वयन में _Is_ready() सदस्य है।
- 1. std :: valarray की तरह भविष्य क्या है?
- 2. परिवर्तित एक भविष्य
- 3. std :: भविष्य अभी भी टाल जब std :: packaged_task (VS11) का उपयोग कर
- 4. मध्यवर्ती वायदा से भविष्य बनाना?
- 5. चेतावनी: भविष्य
- 6. मैं एक java.util.concurrent कैसे लपेट सकता हूं। भविष्य में एक अक्का भविष्य में?
- 7. std :: back_inserter एक std :: set के लिए?
- 8. एक std :: vector को std :: valarray
- 9. सीधे एक std :: istream से std :: string
- 10. सी ++ भविष्य में "नहीं" (!) कैसे है?
- 11. उद्देश्य सी का भविष्य?
- 12. क्या भविष्य में कोई भविष्य <T> टाइप है?
- 13. रुबी में कार्य/भविष्य
- 14. - प्रदर्शन बनाम भविष्य
- 15. एक std :: heap
- 16. एक std :: स्ट्रिंग
- 17. एक std :: स्ट्रिंग
- 18. एक std :: vector
- 19. एक std :: वेक्टर
- 20. एक std :: fstream
- 21. भविष्य/थ्रेडिंग को समझना
- 22. PostgreSQL: भविष्य में टाइमस्टैम्प
- 23. स्कैला, भविष्य का जावा (?)
- 24. std :: allocator
- 25. std :: std :: weak_ptr key
- 26. Multiplexing भविष्य <> जावा
- 27. "एसएपी जावा कनेक्टर" का भविष्य
- 28. भविष्य कहनेवाला पाठ को निष्क्रिय
- 29. PHP MySQL फ़ंक्शंस का भविष्य
- 30. आसानी से std :: तारों की एक std :: सूची शुरू करें?
'वैध' के लिए जाँच करें? –
@CatPlusPlus जब तक कि मैं गलत नहीं हूं, 'वैध' केवल तभी जांचता है जब भविष्य में एक साझा स्थिति हो (यानी यह 'सत्य' वापस आती है जब तक कि भविष्य में 'get' कहा जाता है)। –
तो, यदि 'get' को कॉल किया गया है और संग्रहीत मूल्य लौटाता है, तो क्या आप अभी भी 'सत्य' चाहते हैं? (मुझे यकीन नहीं है कि यह उपयोगी क्यों होगा, क्योंकि आप केवल एक बार मूल्य प्राप्त कर सकते हैं।) –