मैं Ctrl + सी सी ++ में ईवेंट कैसे प्राप्त करूं?मैं ctrl-c ईवेंट कैसे पकड़ सकता हूं? (सी ++)
उत्तर
signal
सबसे विश्वसनीय रास्ता के रूप में यह कार्यान्वयन में अलग नहीं है। मैं sigaction
का उपयोग करने की सलाह दूंगा। टॉम का कोड अब इस तरह दिखेगा:
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
void my_handler(int s){
printf("Caught signal %d\n",s);
exit(1);
}
int main(int argc,char** argv)
{
struct sigaction sigIntHandler;
sigIntHandler.sa_handler = my_handler;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;
sigaction(SIGINT, &sigIntHandler, NULL);
pause();
return 0;
}
मुझे लगता है कि my_handler को 'int s' लेना चाहिए क्योंकि यह तर्क है। 'sig_t' स्वयं एक फ़ंक्शन पॉइंटर प्रकार है। –
ओएसएक्स पर काम करना चाहिए। मेरी main.mm फ़ाइल में, मुझे सिग्नल.h, stdlib.h, या unistd.h को भी शामिल करने की आवश्यकता नहीं थी। मैंने अभी stdio.h और फाउंडेशन/फाउंडेशन.h शामिल किया है, और फिर अगर मुझे शटडाउन संदेश आउटपुट के लिए std :: cout stuff करने की आवश्यकता है, तो मैंने iostream शामिल किया था। – Volomike
आप SIGINT signal (हम POSIX बात कर रहे हैं ना?) Sigaction के लिए
देखें @Gab Royer's जवाब को पकड़ने के लिए की है।
उदाहरण:
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
void my_handler(sig_t s){
printf("Caught signal %d\n",s);
exit(1);
}
int main(int argc,char** argv)
{
signal (SIGINT,my_handler);
while(1);
return 0;
}
हाँ, यह एक मंच निर्भर प्रश्न है।
यदि आप POSIX पर एक कंसोल प्रोग्राम लिख रहे हैं, सिग्नल एपीआई (# शामिल < सिग्नल एच >) का उपयोग करें।
एक WIN32 जीयूआई अनुप्रयोग में आपको WM_KEYDOWN संदेश को संभालना चाहिए।
एक Windows कंसोल अनुप्रयोग के लिए, आप CTRL + सी और CTRL + BREAK संभाल करने SetConsoleCtrlHandler उपयोग करना चाहते हैं।
उदाहरण के लिए here देखें।
कंसोल एप्लिकेशन, विंडोज़ एप्लिकेशन, या क्या? – GManNickG
कौन सा ओएस विंडोज, लिनक्स, आदि .. – shf301
अच्छा, यह एक क्यूटी ऐप है, लेकिन मैं इसे विकास के दौरान कंसोल से चला रहा हूं। (यह लिनक्स है) – Scott