سؤال

وكيف يمكنني التقاط السيطرة + C حدث في 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;    
}

نصائح أخرى

لالتطبيق وحدة التحكم ويندوز، وكنت ترغب في استخدام SetConsoleCtrlHandler للتعامل مع CTRL + C و CTRL + BREAK .

هنا ل مثال على ذلك.

لديك للقبض على SIGINT إشارة (ونحن نتحدث POSIX أليس كذلك؟)

وانظرGab Royer's الإجابة عن sigaction.

مثال:

#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، استخدام API إشارة (# تشمل ).

في تطبيق واجهة المستخدم الرسومية WIN32 يجب معالجة الرسالة WM_KEYDOWN.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top