मेरे पास boost::thread
है जो boost::asio::serial_port
पर सिंक्रोनस रीड करता है। जब मैं कक्षा के एक उदाहरण को नष्ट करता हूं जिसमें दोनों शामिल होते हैं, तो मैं चाहता हूं कि थ्रेड को सुन्दर तरीके से समाप्त करना पड़े, भले ही इसे रीड कॉल में अवरुद्ध किया गया हो। मैं यह कैसे कर सकता हूँ?बूस्ट पर सिंक्रोनस पढ़ने को अनब्लॉक करें :: asio :: serial_port
docs पर देखकर, मैंने cancel
पर प्रयास किया, लेकिन यह केवल एसिंक्रोनस रीड/लिखने के लिए काम करता है। तब मैंने close
की कोशिश की, लेकिन मुझे अपवाद मिला और यह वह प्रकार नहीं था जिसे आप पुनर्प्राप्त कर सकते हैं। शायद send_break
या native_handle
का उपयोग कर रहे हैं? (यह विंडोज है और पोर्टेबिलिटी महत्वपूर्ण नहीं है)
अद्यतन: मैं भी stop
io_service
मैं सीरियल पोर्ट वस्तु के निर्माता के लिए पारित करने की कोशिश की, लेकिन read
अनब्लॉक नहीं था।
संपादित: अपवाद वास्तव में "catchable" है, लेकिन मैं एक नाशक के अंदर एक आज़माएं/कैच ब्लॉक डाल करने के लिए नफरत चाहते हैं, और कोड पुनर्रचना शटडाउन प्रक्रिया करने के लिए नाशक के बाहर के क्षेत्र में परिवर्तन की बहुत सारी ट्रिगर करेगा ऊपरी परतें तो अगर मैं कुछ बूस्ट अथॉरिटी कहता हूं कि कोई दूसरा रास्ता नहीं है तो मैं केवल इस समाधान के लिए जाऊंगा।
गिरा दिया और वह बूस्ट क्यों boost :: एसियो नहीं बुलाया जाता है :: SioAndAsio :) –
तुम्हारा मतलब है को बढ़ावा देने :: asio :: serial_port या पढ़ने के लिए तुल्यकालिक लिखा नहीं होती है? मैं मतदान से बचने के लिए तुल्यकालिक पढ़ने/लिखने के लिए गया ... अगर वे मुझे इस तरह से पढ़ने और लिखने की अनुमति देते हैं, जो आश्चर्यजनक रूप से काम करता है और सीपीयू चक्रों को बर्बाद नहीं करता है, तो उन्हें शानदार तरीके से समाप्त करने का एक तरीका प्रदान करना चाहिए। –
हां, मैं कुछ दिन पहले ऐसा करना चाहता था। –