एक आलेखीय अनुप्रयोग में मैं कंसोल इनपुट का उपयोग करके डीबग कमांड निष्पादित करता हूं। जब कंसोल बनाया जाता है तो उस नए इनपुट को इकट्ठा करने के लिए एक नया धागा भी बनाया जाता है जो उस इनपुट को संभालता है, ग्राफ़िकल एप्लिकेशन समानांतर चल रहा है। मैं बूस्ट :: थ्रेड लाइब्रेरी का उपयोग करता हूं।इनपुट प्रतीक्षा से सीन को रोकना संभव है?
यह अब तक अच्छा काम करता है, हालांकि मुझे इस धागे के निष्पादन को रोकने के लिए एक अच्छा समाधान नहीं मिला है। धागा हमेशा एक उपयोगकर्ता इनपुट के लिए इंतज़ार कर रहा है:
while(appRunning)
{
std::cin>>theUserCommand;
// ...do stuff
}
फिर जब चित्रमय आवेदन समाप्त हो जाती है, यह सब सांत्वना कार्यों बंद हो जाएगा, जिसमें मैं धागा शामिल हैं:
appRunning = false;
// do some more related clean up
myListeningThread->join();
आप देख सकते हैं शामिल होने के बाद, std :: cin उपयोगकर्ता इनपुट के लिए इंतजार कर रहा है। मैंने कोशिश किए गए समाधानों में से एक है "घटनाओं को सिंथेटिज़ करना", std :: cin आपको ENTER के साथ जो भी मूल्य भेजता है, वह धागा अच्छी तरह खत्म हो जाएगा, यह समाधान भयानक है और मैं इसे रखना नहीं चाहता । इसके अलावा, यह उपकरण को निष्पादित वातावरण में से एक में काम करता है, लेकिन जब मैं UI API के साथ इसका उपयोग करने का प्रयास करता हूं तो विफल रहता है। क्या आप लोग मुझे मार्गदर्शन कर सकते हैं कि मैं इसे सही तरीके से कैसे ठीक कर सकता हूं? वास्तव में यह सुनिश्चित करने के लिए नहीं कह सकता कि सी ++ दस्तावेज़ीकरण में std :: cin उपयोगकर्ता इनपुट के लिए प्रतीक्षा करने के लिए एक फ़ंक्शन है, और बस प्रोग्राम निष्पादन जारी रखें, क्या यह भी संभव है?
संपादित करें: ठीक है मुझे लगता है कि keybd_event कुछ वातावरण के लिए थोड़ा भ्रामक है, स्पष्ट रूप से WriteConsoleInput के साथ इनपुट हैंडलर को स्पष्ट रूप से निर्दिष्ट करता है।
कई संभावनाएं हैं, लेकिन वे सभी ओएस-निर्भर हैं। इस कार्यक्रम के लिए कौन सा ऑपरेटिंग सिस्टम है? – zwol
विन/वीस्टूडियो 9.0, मैंने जिस समाधान का उल्लेख किया है, उसके लिए मैंने keybd_event का उपयोग किया है, अगर यह ओएस-निर्भर होगा तो कोई समस्या नहीं है। आप इसे ठीक करने के लिए मुझे कैसे सलाह देंगे? – notNullGothik
बीटीडब्ल्यू, SetConsoleCtrlHandler वास्तव में मेरे लिए काम नहीं करता है, यह एप्लिकेशन प्रक्रिया समाप्त होने के लिए सभी साफ-सफाई को छोड़कर एप्लिकेशन प्रक्रिया समाप्त कर देगा। – notNullGothik