Jak złapać zdarzenie C++ w C++?Jak mogę złapać zdarzenie ctrl-c? (C++)
Odpowiedz
signal
nie jest najbardziej niezawodny sposób, ponieważ różni się w realizacji. Polecam używanie sigaction
. Kod Toma wyglądałby teraz tak:
#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ślę, że my_handler powinien przyjąć 'int s' jako argument. 'sig_t' sam jest typem wskaźnika funkcji. –
Działa na OSX. W pliku main.mm nie potrzebowałem nawet signal.h, stdlib.h ani unistd.h. Po prostu włączyłem stdio.h i Foundation/Foundation.h, a następnie, jeśli potrzebowałem zrobić std :: cout stuff dla wyprowadzenia komunikatu o zamknięciu, włączyłem iostream. – Volomike
Trzeba złapać SIGINT signal (mówimy POSIX prawda?)
See @Gab Royer's odpowiedź dla sigaction.
przykład:
#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;
}
Tak, to jest pytanie zależne od platformy.
Jeśli piszesz program konsoli na POSIX, użyj sygnału API (#include <signal.h>).
W aplikacji GUI WIN32 należy obsłużyć wiadomość WM_KEYDOWN.
Dla app konsoli Windows chcesz użyć SetConsoleCtrlHandler obsłużyć CTRL + C i CTRL + BREAK.
Przykładem jest here.
- 1. Jak mogę złapać zdarzenie zawieszenia systemu w Pythonie?
- 2. rozszerzenie firefox. Jak złapać zdarzenie onload?
- 3. Jak złapać zdarzenie CTRL + mouseWheel z InputMap
- 4. Rails 4, jak złapać ajax: zdarzenie powodzenia
- 5. Kendo UI Grid - jak złapać zdarzenie wystrzeliwane przez filtr
- 6. Jak mogę złapać wyjątek z zakleszczeniem kanału?
- 7. nie mogę złapać wyjątek
- 8. Jak złapać zdarzenie przewijania wewnątrz ramki na płótnie na Facebooku?
- 9. Jak mogę napisać trasę, aby złapać * .php?
- 10. Wyjątek IOException Nie mogę złapać
- 11. Czy mogę złapać błędy złych wskaźników w C++?
- 12. Dlaczego nie mogę złapać ogólnego wyjątku w języku C#?
- 13. Jaki sygnał z klawiatury poza Ctrl-C mogę złapać?
- 14. Jak mogę przekazać zdarzenie do funkcji w C#?
- 15. Jak złapać IOError dekompresji?
- 16. Jak mogę przetestować zdarzenie kontrolera MVC
- 17. Jak złapać wyjątek SocketTimeoutException
- 18. C# Właściwość nazwany zdarzenie
- 19. Jak złapać wyjątek UrlFetchApp.fetch
- 20. C#: Podnoszenie odziedziczony zdarzenie
- 21. Jak złapać wyjątki warunkowo?
- 22. Dlaczego nie mogę złapać tego wyjątku?
- 23. Jak wywołać zdarzenie ręcznie w języku C#?
- 24. Jak złapać wyjątek ClassCastException?
- 25. Matlab: Jak złapać ostrzeżenie
- 26. Jak złapać net :: ERR_CONNECTION_REFUSED
- 27. Jak mogę przetestować zdarzenie rozgłaszania w AngularJS
- 28. Jak mogę zwolnić zdarzenie zmniejszania rozmiaru przeglądarki?
- 29. RxJS: Jak mogę event.preventDefault() upuścić zdarzenie?
- 30. Jak mogę złapać ten błąd? (POST Content-Length ...)
Aplikacja konsolowa, aplikacja systemu Windows lub co? – GManNickG
Który system operacyjny Windows, Linux itp. – shf301
Cóż, jest to aplikacja Qt, ale uruchamiam ją z konsoli podczas programowania. (To jest Linux) – Scott