2010-03-26 1 views
7

एक बहु-क्रम परिदृश्य में, मैं इस तरह एक विधि है:क्या एक विधि जो राज्य के बदलाव की प्रतीक्षा करनी चाहिए?

bool WaitForChange(time_duration WaitTime) const; 

इस विधि इंतजार कर रहा है या तो जब तक वस्तु की स्थिति बदल गया है और बाहर सच देता है, या जब तक टाइमआउट बार है (कैसे करते हैं आप का कहना है कि?) और झूठी वापसी करता है।

मेरा अंतर्ज्ञान यह है कि const विधि के अवांछित दुष्प्रभावों के खिलाफ सुरक्षा करना है, इसलिए यह ठीक है। लेकिन फिर, कुछ उपयोगकर्ता सोच सकते हैं कि स्थिति बदल नहीं सकती थी, क्योंकि विधि const घोषित की गई है। क्या वह उपयोगकर्ता बेवकूफ़ है, या क्या मुझे भ्रम से बचने के लिए विधि को गैर-const बनाना चाहिए?

+0

आप कैसे प्रतीक्षा करते हैं? हालत चर, या नींद मतदान? – nos

+0

मैं प्रतीक्षा करने के लिए 'बूस्ट :: condition_variable' का उपयोग कर रहा हूं और लॉकिंग के लिए' boost :: mutex' का उपयोग कर रहा हूं। –

उत्तर

10

स्थिरांक के रूप में विधि की घोषणा करके, आप कहते हैं कि "इस विधि कॉलिंग वस्तु की स्थिति बदलने नहीं है।" यह (उम्मीद है) सच है। तो इसे स्थिर बनाओ।

यदि कोई सोचता है, तो कॉन्स्टेस का अर्थ है "इस विधि को कहा जाता है, उस व्यक्ति की तुलना में कोई और वस्तु स्थिति बदल सकता है"।

4

मैं स्थिरता के लिए वोट देता हूं।

विधि ही कुछ भी नहीं बदलता है, बस इंतजार कर रहा है ...

0

यदि आप यह देखने का इंतजार कर रहे हैं कि वस्तु सदस्य बदल गए हैं ... अस्थिरता के बारे में क्या?

bool WaitForChange(time_duration WaitTime) volatile 

const तात्पर्य वस्तु का राज्य समारोह कॉल भर एक ही है, इसलिए मैं इसका इस्तेमाल नहीं होता। दूसरी तरफ volatile, संकलक को इंगित करता है कि जब भी उन्हें एक्सेस किया जाता है तो सदस्यों को पुनः प्राप्त किया जाना चाहिए, जो शायद आप चाहते हैं कि आप परिवर्तन की तलाश में हैं।

+0

-1 आप वाक्यविन्यास के साथ मुहावरे भ्रमित कर रहे हैं। 'const' गारंटी देता है कि फ़ंक्शन" ऑब्जेक्ट की स्थिति को संशोधित नहीं करेगा जिसके लिए इसे कहा जाता है। " वह, और कुछ और नहीं। 'अस्थिर' केवल तभी जरूरी है जब "किसी इकाई के मूल्य को विलुप्त करने के माध्यम से बदल दिया जा सके; उदाहरण के लिए, वास्तविक समय घड़ी।" (स्ट्राउस्ट्रप से उद्धरण, http://www2.research.att.com/~bs/glossary.html) – egrunin