के लिए लैम्ब्डा फ़ंक्शन के अंदर कंपाइलर त्रुटि चर "कब्जा नहीं किया गया" मैं C++ में मल्टीथ्रेडिंग के बारे में सीख रहा हूं और थ्रेड पूल सेट अप करने का प्रयास कर रहा हूं, लेकिन मुझे "त्रुटि:" मैपर नोड्स "कैप्चर नहीं किया गया है" और "त्रुटि: 'कमांड' कैप्चर नहीं किया गया है"। मैंने लैम्ब्डा में चर को कैप्चर करने के लिए "इस" का उपयोग करने के बारे में कुछ पढ़ा है, लेकिन अभी तक कुछ भी काम नहीं कर रहा है।थ्रेडपूल
मैं नीचे दिए गए कोड में थ्रेड पूल लैम्ब्डा फ़ंक्शन में कमांड और मैपर नोडर्स चर का उपयोग कैसे कर सकता हूं?
void MapReduceServer::spawnMappers() throw() {
vector<string> mapperNodes(nodes);
random_shuffle(mapperNodes.begin(), mapperNodes.end());
string command = buildCommand(mapperNodes[0], executablePath, mapperExecutable, mapOutputPath);
ThreadPool pool(numMappers);//numMappers = 8
for (size_t id = 0; id < numMappers; id++) {
pool.schedule([id] {
cout << oslock << "Thread (ID: " << id << ") has started." << endl << osunlock;
spawnWorker(mapperNodes[0], command); /*compiler error here*/
cout << oslock << "Thread (ID: " << id << ") has finished." << endl << osunlock;
});
}
@ एमएम, मुझे लगता है कि आप उस पर गलत हैं। टीसी ++ पीएल चौथा संस्करण का §11.4.4। स्पष्ट रूप से कहता है कि एक खाली तर्क सूची छोड़ी जा सकती है। तो, उदाहरण के लिए, [cppreference.com में यह आलेख] (http://en.cppreference.com/w/cpp/language/lambda) करता है। – Paulo1205
@ Paulo1205 ठंडा, –