2010-11-24 20 views
34

बूस्ट :: थ्रेड का उपयोग करके धागे को सोना असंभव लगता है। विधि नींद को system_time की आवश्यकता होती है लेकिन मैं इसे कैसे बना सकता हूं?सी ++ बूस्ट थ्रेड कैसे सोएं

वास्तव में बहुत मदद नहीं करता है अंदर पुस्तकालयों रहा है ...

असल में मैं समारोह है कि मैं प्रवेश बिंदु के रूप में इस धागे को पारित अंदर एक धागा है, मैं

boost::this_thread::sleep 
की तरह कुछ कॉल करना चाहते हैं

या कुछ, यह कैसे करें?

बूस्ट के संस्करण के आधार पर धन्यवाद

उत्तर

83

:

या तो ...

#include <boost/chrono.hpp> 
#include <boost/thread/thread.hpp> 

boost::this_thread::sleep_for(boost::chrono::milliseconds(100)); 

या ...

#include <boost/date_time/posix_time/posix_time.hpp> 
#include <boost/thread/thread.hpp> 

boost::this_thread::sleep(boost::posix_time::milliseconds(100)); 

तुम भी माइक्रोसेकंड, सेकंड का उपयोग कर सकते , मिनट, घंटे और शायद कुछ अन्य, मुझे यकीन नहीं है।

+2

हां, धन्यवाद ... मैंने इस_थ्रेड का उपयोग करके ध्यान नहीं दिया, लेकिन केवल :: थ्रेड को बढ़ावा दिया और कुछ भी काम नहीं किया :) थांस्क – Andry

+2

यह मुझे निम्न त्रुटि देता है (एक्सकोड 5/एलएलवीएम का उपयोग करके): त्रुटि: कोई व्यवहार्य रूपांतरण नहीं 'boost :: posix_time :: microseconds' (उर्फ 'subsecond_duration ') से 'const system_time' (उर्फ 'कॉन्स बूस्ट :: posix_time :: ptime') –

3

सबसे पहले

boost::posix_time::seconds secTime(1); 
boost::this_thread::sleep(secTime); 

दूसरी बात

boost::this_thread::sleep(boost::posix_time::milliseconds(100)); 
+0

भयानक उत्तर से :) –

19

एक और पद से, मुझे पता चला boost::this_thread::sleep बूस्ट v1.5.3 के लिए हटा दिया जाता है: http://www.boost.org/doc/libs/1_53_0/doc/html/thread/thread_management.html

इसके बजाय, कोशिश

void sleep_for(const chrono::duration<Rep, Period>& rel_time); 

उदा।

boost::this_thread::sleep_for(boost::chrono::seconds(60)); 

या हो सकता है की कोशिश

void sleep_until(const chrono::time_point<Clock, Duration>& abs_time); 

मैं पदावनत sleep समारोह से बूस्ट v1.53 उपयोग कर रहा था, और यह aperiodically कार्यक्रम दुर्घटनाग्रस्त हो गया। sleep_for फ़ंक्शन पर कॉल करने के लिए जब मैंने sleep फ़ंक्शन पर कॉल बदल दी, तो प्रोग्राम क्रैश हो गया।

0

मैं कठिन रास्ता है कि कम से कम एमएस दृश्य स्टूडियो में (कोशिश की 2013 और 2015) वहाँ

boost::this_thread::sleep(boost::posix_time::microseconds(SmallIterval)); 

और

boost::this_thread::sleep_for(boost::chrono::microseconds(SmallIterval)); 
or 
std::this_thread::sleep_for(std::chrono::microseconds(SmallIterval)); 

जब अंतराल कुछ बजाय छोटा होता है के बीच बड़ा अंतर है सीखा पर्याप्त दहलीज (मैंने 15000 माइक्रोसॉन्ड = 15 मिलीसेकंड की दहलीज देखी)।

यदि छोटे अंतर छोटे हैं, तो नींद() तत्काल बाधा करता है। नींद (100 मिली) नींद के रूप में व्यवहार करती है (0 मिली)।

लेकिन पूरे दहलीज के लिए थ्रेसहोल्ड रुकने के समय के अंतराल के लिए sleep_for()। sleep_for (100 mks) sleep_for (15000 mks) के रूप में व्यवहार करता है।

थ्रेसहोल्ड से बड़े अंतराल के लिए व्यवहार और मान 0 के लिए व्यवहार समान है।

संबंधित मुद्दे