2011-11-28 15 views
5

मैं एक वर्ग है कि जब बनाया है कोशिश कर रहा हूँ, एक पृष्ठभूमि धागा, नीचे के समान शुरू होता है "थ्रेड :: थ्रेड :: थ्रेड :: अनसुलझा फ़ंक्शन प्रकार" को बढ़ावा देने के लिए कॉल के लिए कोई मिलान करने वाला फ़ंक्शन नहीं है। जब मैं कक्षा के बाहर ऐसा करता हूं तो यह ठीक काम करता है। मैं फ़ंक्शन पॉइंटर को काम करने के लिए कैसे प्राप्त कर सकता हूं?बढ़ावा :: एक वर्ग के भीतर धागा

उत्तर

6

आप thread_ प्रारंभ करना चाहिए के रूप में:

Test() 
    : thread_(<initialization here, see below>) 
{ 
} 

Process वर्ग Test के एक सदस्य गैर स्थैतिक विधि है। आप या तो कर सकते हैं:

  • Process स्थिर के रूप में घोषित करें।
  • Process पर कॉल करने के लिए एक टेस्ट उदाहरण बांधें।

आप Process के रूप में स्थिर घोषित करते हैं, तो प्रारंभकर्ता सिर्फ

&Test::Process 

अन्यथा होना चाहिए, आप Boost.Bind का उपयोग कर Test का एक उदाहरण के लिए बाध्य कर सकते हैं:

boost::bind(&Test::Process, this) 
0

अपने प्रक्रिया विधि स्थिर करें:

static void Process() 
    { 
    ... 
    } 
4

समस्या यह है कि है आप बूस्ट :: थ्रेड को किसी सदस्य फ़ंक्शन में पॉइंटर के साथ प्रारंभ करना चाहते हैं।

आप की आवश्यकता होगी:

Test() 
    :thread_(boost::bind(&Test::Process, this)); 
{ 

} 

इसके अलावा इस question बहुत उपयोगी हो सकता है।

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