boost::thread
के साथ शुरू करने के लिए, मैंने एक बहुत ही सरल उदाहरण लिखा है - जो काम नहीं करता है। क्या कोई मेरी गलती को इंगित कर सकता है?बूस्ट :: थ्रेड - सरल उदाहरण काम नहीं करता है (सी ++)
मैंने काम करने के लिए एक बहुत ही साधारण मज़ेदार-प्रकार की कक्षा लिखी।
class SumWorker
{
private:
double _sum;
public:
SumWorker() : _sum(-1.0) {}
void operator() (std::vector<double> const & arr)
{
_sum = 0.0;
for(std::vector<double>::const_iterator i = arr.begin();
i != arr.end();
i++)
{
_sum += (*i);
}
}
double const value() const
{
return _sum;
}
};
अब, मैं दो तरीकों में से एक में राशि की गणना कर सकता: यह युगल के एक std::vector
की राशि की गणना करने के लिए, और मुझे बाद में परिणाम प्राप्त करने का तरीका बताते हैं चाहिए था। यदि मैं इसे मुख्य धागे के भीतर करता हूं, जैसे
SumWorker S;
S(numbers); // "numbers" is an std::vector<double>
double sum = S.value(); // "sum" now contains the sum
तब सब कुछ काम करता है। हालांकि, अगर मैं इसे एक अलग धागे (जो पूरे बिंदु पर था) में करने की कोशिश करता है,
SumWorker S;
boost::thread thread(S, numbers); // Should be equivalent to "S(numbers);"
thread.join(); // Wait for thread to finish
double sum = S.value(); // "sum" now contains -1.0
... तो यह काम नहीं करता है।
क्षमा करें अगर यह स्पष्ट है, लेकिन मैं stumped हूँ। कोई सुराग?