- Est-il possible de gérer cet événement d'une manière ou d'une autre?
- Que se passe-t-il en termes de déroulement de pile et de désallocation d'objets statiques/globaux?
Répondre
EDIT: SIGINT, pas SIGTERM. Et Assaf rapporte qu'aucun objet n'est détruit (au moins sous Windows) pour SIGINT non géré.
Le système envoie un SIGINT. Ce concept s'applique (avec quelques variantes) pour toutes les implémentations C. Pour le gérer, vous appelez le signal, en spécifiant un gestionnaire de signal. Voir la documentation sur la fonction de signal au Open Group et MSDN.
La deuxième question est un peu plus complexe et peut dépendre de l'implémentation. Le meilleur pari est de gérer le signal, ce qui vous permet d'utiliser manuellement delete
et exit()
. Ctrl-C dans l'application de console va générer un signal
Merci. fyi, la page MSDN que vous avez liée suggère que le système envoie un SIGINT (et que NT vers le haut n'envoie pas SIGTERM du tout). –
Merci, Assaf. Corrigée. –
En outre, SIGINT, qui se traduit par un processus Exit, ne déclenche pas la destruction de tout type d'objet (global, local static, automatique). Si, otoh, vous traduisez le sigint en exit(), les globals/statiques seront destructeurs dans l'ordre inverse de l'initialisation (mais pas automatiquement). –
Le gestionnaire par défaut de ce signal appelle ExitProcess pour terminer l'application. Vous pouvez remplacer ce comportement en définissant vos propres fonctions de gestionnaire pour le signal à l'aide de la fonction SetConsoleCtrlHandler.
+1 pour répondre réellement à la question! –
Qu'en est-il de la désallocation de la statique? –
Vous pouvez vérifier si le déroulement de la pile se produit, avec un code simple:
#include <iostream>
#include <windows.h>
using namespace std;
struct A {
~A() { cerr << "unwound" << endl; }
};
int main() {
A a;
while(1) {
Sleep(1000);
}
}
Que ce produit ne devrait être mise en œuvre dépend, selon la façon dont l'exécution gère les touches Ctrl-C. D'après mon expérience, cela n'a pas lieu.
Bon test! Je me suis trompé. –
J'ai du mal à faire confiance à un tel test, car je ne saurai jamais si le comportement sera différent pour différentes configurations de projet (par exemple libs, dlls, natives, gérées, multithread et leurs combinaisons). Donc, je préfère avoir la "vraie" réponse et ne pas me fier à un tel test moi-même. –
Il n'y a pas de "vraie" réponse - le standard C++ n'a rien à dire sur ce sujet, donc ce que vous obtenez dépend toujours de l'implémentation. –
- 1. Console C/C++ Windows WIN32
- 2. Comment tracer la sortie d'une application de console C++ Win32?
- 3. Bloqué sur GenerateConsoleCtrlEvent en C# avec les applications de la console
- 4. C#: Quelle est la méthode C# appropriée pour lire les arguments/paramètres dans les applications de la console?
- 5. Application Win32 Console vs application CLR Console
- 6. Quel est exactement le point de l'attribut EnablePartialRendering de ScriptManager?
- 7. Quel est exactement le sens de "===" en javascript?
- 8. QT et Win32 Console Appications
- 9. Quel contrôle C#/Win32 la boîte de dialogue réseau sans fil est-elle utilisée?
- 10. Événements de clavier C++ Win32
- 11. Quel est exactement le problème avec les identifiants de connexion oracle séparés par une période
- 12. Comment fonctionnent les applications de test de RAM? C# Exemple?
- 13. Quel est l'objectif du fichier AppManifest.xaml dans les applications Silverlight?
- 14. Comment VS compile-t-il les applications de la console pour afficher "Appuyez sur une touche pour continuer"?
- 15. Quel est le meilleur moyen de déployer des applications Web?
- 16. Icône d'application de la console C#
- 17. Est-il vrai que les WCF sont des applications de console ou s'exécutent sous IIS?
- 18. Consigner toutes les invocations de fonctions sur la console
- 19. Le C++ implicite cela, et exactement comment il est poussé sur la pile
- 20. Quelle est exactement la pile technologique définissant les API Web?
- 21. Quelle est exactement la dernière partie de l'adresse dans WCF?
- 22. C# pour les applications de télécommunication?
- 23. Quel modèle de projet dois-je utiliser pour le projet de développement de jeux Visual C++?
- 24. Récupère le contenu du tampon de la console dans C
- 25. Java gotoxy (x, y) pour les applications console
- 26. Comment écrire sur la dernière ligne de la console?
- 27. L'application Win32 est suspendue pour minimiser l'animation de la fenêtre
- 28. Quel est l'équivalent C# de java.util.regex?
- 29. Comment désactiver les options de la console
- 30. Quel est l'équivalent de Thread.SetApartmentState en C++?
+1: Excellente question :) –
Excellent handle :) –