2011-12-09 17 views
11

दो std :: threads ए और बी को देखते हुए, क्या कोई तरीका है कि ए बी को निलंबित कर सकता है, उस उद्देश्य के लिए बी में किसी भी कस्टम कोड के बिना?किसी अन्य से नींद धागा

तर्क: वर्तमान में, बी एक बहुत ही जटिल एल्गोरिदम है, जिसे समय-समय पर कुछ साझा ध्वज की जांच करके ए (एक निगरानी धागा) इसे स्पष्ट रूप से बाहर निकलना चाहिए। समस्या है, डीबगिंग उद्देश्यों के लिए मैं वास्तव में जानना चाहता हूं कि किस राज्य में बी बी है, इस तरह के बाहर निकलने का अनुरोध (उदाहरण के लिए कि हम साझा ध्वज को कहाँ भूल गए थे), इसलिए मैं बी को रोकना चाहता हूं (डीबगिंग के लिए) ए

अग्रिम धन्यवाद! ब्रोस

+1

आप डीबगर के माध्यम से ऐसा कर सकते हैं। विजुअल स्टूडियो में, बस थ्रेड पर राइट क्लिक करें और 'फ्रीज' चुनें। मुझे यकीन है कि जीडीबी की समान क्षमताएं – jalf

+0

तकनीकी रूप से "रोकें" नहीं होने पर, एसआईजीएसईजीवी के साथ ए के भीतर प्रक्रिया को मारने और कोर डंप की जांच करने पर विचार करें। – thiton

+0

@jalf: उस स्थिति में राज्य को पाने के लिए लगभग असंभव होगा <इस समय> ए ध्वज सेट करता है –

उत्तर

6

यह सिस्टम पर निर्भर करता है। विंडोज़ में SuspendThread फ़ंक्शन है, लेकिन मैं स्वीकार करूंगा कि मुझे इसके बारे में बहुत कुछ पता नहीं है। यूनिक्स के तहत, आपको pthread_kill का उपयोग करके थ्रेड को सिग्नल भेजने में सक्षम होना चाहिए (जो इसके नाम के बावजूद, थ्रेड को मारता नहीं है, बल्कि सिग्नल भेजता है), और इसे लक्षित थ्रेड में पकड़ें, जहां सिग्नल हैंडलर कॉल कर सकता है sleep

+0

'निलंबित थ्रेड() 'बहुत अच्छा है, लेकिन किसी को बाद में' ResumeThread() 'को कॉल करना होगा या थ्रेड हमेशा के लिए निलंबित कर दिया जाएगा। – sharptooth

+0

@ शार्पतोथ कि किसी को थ्रेड ए होना चाहिए, क्योंकि इसे निलंबित कर दिया गया है, नहीं? –

+0

@VJovic: हाँ, लेकिन ऐसा करना भूल सकता है। यह बहुत अच्छा होगा अगर एक निश्चित थ्रेड को एक निश्चित थ्रेड को निलंबित करने के लिए कोई फ़ंक्शन था ताकि यह स्वतः हो। मुझे किसी के बारे में पता नहीं है। – sharptooth

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