À l'aide de SIGINT
Selon cette http://www.cplusplus.com/reference/clibrary/csignal/signal.html
SIGINT
est généralement utilisé/cause par l'utilisateur. Comment puis-je causer un SIGINT
en c++? j'ai vu un exemple d'utilisation de kill(pid, SIGINT);
mais j'ai plutôt la cause d'une autre manière. Aussi, je suis avec windows.
Vous devez vous connecter pour publier un commentaire.
C89 et C99 définir raise() dans le signal.h:
Cette fonction envoie un signal au processus appelant, et est équivalent à
Si la plate-forme prend en charge les threads, alors l'appel est équivalent à
La valeur de retour est 0 en cas de succès, différente de zéro autrement.
Vous causer une
SIGINT
en appuyant sur Ctrl+C.Exemple de code:
Lors de l'exécution à:
(Notez que c'est de la pure C code, doivent travailler en C++ si)
Edit: La seule façon que je connaisse pour envoyer
SIGINT
en dehors de manière interactive en appuyant sur Ctrl+C est à l'aide dekill(pid, SIGINT)
comme vous l'avez dit...Quelle autre manière pensez-vous? Le
kill()
fonction est la seule façon de le kernel permet de programmer l'envoi d'un signal.En fait, vous avez mentionné que vous avez été en utilisant Windows. Je ne suis même pas sûr de ce que
kill()
n'sur Windows, depuis Windows n'a pas le même signal d'architecture Unix systèmes dérivés faire. Win32 offre TerminateProcess la fonction, qui peut faire ce que vous voulez. Il y a aussi le GenerateConsoleCtrlEvent fonction, qui s'applique aux programmes de la console et de simuler un Ctrl+C ou Ctrl+Pause."Signaux" à cet égard sont un Unix/POSIX concept. Windows n'a pas d'équivalent direct.
Je suppose que c'est une application Win32...
Pour un "contrôlée" ou "de sécurité", à la sortie, si l'application utilise une boucle de message vous pouvez utiliser le PostQuitMessage API à partir de l'intérieur de lui, ou PostMessage en dehors d'elle. Sinon, vous aurez besoin pour obtenir le fil/ID de processus et d'utilisation de la TerminateThread ou TerminateProcess API, en fonction de si vous voulez tuer juste un fil de discussion ou la totalité du processus et de tous les fils qu'il a engendré. Il est expliqué bien par Microsoft (comme avec tous les appels de l'API) sur MSDN:
http://msdn.microsoft.com/en-us/library/aa450927.aspx