2012-05-10 21 views
10

मैं एक फ़ंक्शन में थ्रेड बनाता हूं, और दूसरे फ़ंक्शन में, मैं इस थ्रेड को रोकना चाहता हूं। मैं इस तरह की कोशिश की है:बूस्ट :: थ्रेड को कैसे रोकें/बाधित करें?

class Server 
{ 
private: 
    boost::thread* mPtrThread; 
... 

public: 
    void createNewThread() 
    { 
     boost::thread t(...); 
     mPtrThread = &t; 
    } 


    void stopThread() 
    { 
     mPtrThread->interrupt(); 
    } 
} 

लेकिन यह work.How मैं धागा रोक सकता है नहीं है?

उत्तर

20

यदि आप इंटरप्ट() का उपयोग करना चाहते हैं तो आपको interruption points परिभाषित करना चाहिए। जैसे ही यह बाधाओं में से एक तक पहुंचता है, इंटरप्ट() को कॉल करने के बाद थ्रेड बाधित हो जाएगा।

+0

बहुत बहुत धन्यवाद! – wtm

17

सबसे पहले, createNewThread() में आप एक स्थानीय दायरे में एक boost::thread t घोषित करने और वर्ग के सदस्य mPtrThread करने के लिए अपने सूचक आवंटित। createNewThread() खत्म होने के बाद, t नष्ट हो गया है और mPtrThread में एक अवैध सूचक होगा।

मैं कुछ mPtrThread = new boost::thread(...) जैसे कुछ उपयोग करना चाहता हूं;

बूस्ट में मल्टीथ्रेडिंग के बारे में अधिक जानने के लिए आप this article पढ़ना भी चाहेंगे।

+1

वास्तव में अच्छा लेख, बहुत मदद करें। धन्यवाद ~ – wtm

+0

आपको यह सुनिश्चित करने के लिए एक स्मार्ट पॉइंटर का भी उपयोग करना चाहिए कि बूस्ट :: थ्रेड हटा दिया जाए। – allyourcode

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