का उपयोग कर थ्रेडेड सर्वर लूप को रोकना मैं एक बड़े सॉफ्टवेयर के लिए एक छोटा सर्वर लूप विकसित कर रहा हूं लेकिन यह काम नहीं करता है क्योंकि मैं इसे करना चाहता हूं।Boost :: Asio
".quit" में उपयोगकर्ता प्रकार मैं सॉफ्टवेयर इस थ्रेड सर्वर पाश बंद करना चाहते हैं जब:
try {
while (true) {
acceptor.accept(socket);
const size_t buffersize = 1024;
char data[buffersize+1] = {0};
data[socket.read_some(boost::asio::buffer(data,buffersize))] = '\0'; // Write data & place terminator
boost::thread asyncWriting(boost::bind(&myClass::writeToFile, this));
socket.close();
}
} catch(const boost::system::system_error& e) {
cout << "Boost System Error: " << e.what() << endl;
}
मैं धागा निम्नलिखित तरीके से शुरू:
serverThread = boost::shared_ptr<boost::thread>(new boost::thread(boost::bind(&myClass::startServer, this)));
लेकिन मैं समस्या है "सर्वर" को रोकना। कोई फर्क नहीं पड़ता अगर मैं धागा बाधा डालते हैं, सॉकेट बंद करने और/या स्वीकर्ता या सिर्फ कार्यक्रम बूस्ट तोड़ने त्रुटि फेंकता है:
Bad file descriptor
यह हर बार होता है नहीं होता है लेकिन अक्सर और मुझे लगता है कि इस मुद्दे को ठीक करना चाहते हैं और न सिर्फ इसे अनदेखा करें।
क्या आप इसे साफ़ को बंद करने में मेरी सहायता कर सकते हैं?
यदि आप एक डिबगर देते हैं और जहां अपवाद फेंक दिया है हमें यह बताएं कि यह उपयोगी होगा। कई एएसओ विधियां हैं जो 'boost :: system :: system_error' को 'boost :: system :: errc :: bad_file_descriptor' के त्रुटि कोड के साथ फेंक सकती हैं। –