Как я могу поймать событие ctrl-c?

FWIW, я не поклонник использования Google Charts когда соответствие & конец важен. Я нахожу, что переменные для калибровки, в частности, непредсказуемы - диаграмма делает свою собственную вещь.

я еще не играл с Грубым/крутым/и т.д., но для проекта более высокого профиля я не буду использовать Google Charts.

125
задан Uwe Keim 2 December 2018 в 19:48
поделиться

4 ответа

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;    
}
163
ответ дан 24 November 2019 в 01:00
поделиться

Для консольного приложения Windows вы хотите использовать SetConsoleCtrlHandler для обработки CTRL + C и CTRL + BREAK .

См. Пример здесь .

49
ответ дан 24 November 2019 в 01:00
поделиться

Вы должны поймать SIGINT signal (мы говорим о POSIX, верно?)

См. ответ @Gab Royer относительно 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;

}
34
ответ дан 24 November 2019 в 01:00
поделиться

Да, это вопрос, зависящий от платформы.

Если вы пишете консольную программу на POSIX, используйте API сигналов (#include ).

В приложении с графическим интерфейсом пользователя WIN32 вы должны обрабатывать сообщение WM_KEYDOWN.

1
ответ дан 24 November 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: