पर संभाल CTRL + C मैं CTRL + सी घटनाओं से निपटने के साथ कुछ समस्याएं एक Win32 सी ++ सांत्वना कार्यक्रम में, है।Win32
असल में मेरा कार्यक्रम इस प्रकार है: (यह अन्य प्रश्न के आधार पर: Windows Ctrl-C - Cleaning up local stack objects in command line app)
bool running;
int main() {
running = true;
SetConsoleCtrlHandler((PHANDLER_ROUTINE) consoleHandler, TRUE);
while (running) {
// do work
...
}
// do cleanup
...
return 0;
}
bool consoleHandler(int signal) {
if (signal == CTRL_C_EVENT) {
running = false;
}
return true;
}
समस्या नहीं निष्पादित किया जा रहा सफाई कोड है।
हैंडलर फ़ंक्शन के निष्पादन के बाद प्रक्रिया समाप्त हो जाती है, लेकिन मुख्य लूप के बाद कोड निष्पादित किए बिना। क्या गलत है?
संपादित करें: के रूप में अनुरोध, यह एक कम से कम परीक्षण का मामला मेरे कार्यक्रम के समान है: http://pastebin.com/6rLK6BU2
मैं "परीक्षण सफाई-अनुदेश" मेरे उत्पादन में स्ट्रिंग नहीं मिलता है।
मुझे नहीं पता कि यह महत्वपूर्ण है, मैं MinGW के साथ संकलित कर रहा हूं।
संपादित करें 2: परीक्षण का मामला कार्यक्रम के साथ समस्या यह Sleep()
समारोह का उपयोग है। इसके बिना कार्यक्रम अपेक्षित काम करता है।
Win32 में फ़ंक्शन हैंडलर किसी अन्य थ्रेड में चलता है, इसलिए जब हैंडलर/थ्रेड इसके निष्पादन को समाप्त करता है तो मुख्य धागा सो रहा है। शायद यह प्रक्रिया बाधा का कारण है?
'SetConsoleCtrlHandler' वापस क्या करता है? – Caesar
SetConsoleCtrlHandler का वापसी मूल्य क्या है? आप त्रुटियों के लिए यह जांच नहीं रहे हैं, btw – lpapp
क्या आप सुनिश्चित हैं कि 'कंसोल हैंडलर' फ़ंक्शन बिल्कुल चलता है? यदि आप डीबगर में प्रोग्राम चलाते हैं और इसमें ब्रेकपॉइंट सेट करते हैं, तो क्या यह ब्रेकपॉइंट पर रुक जाएगा? –