- ¿Es posible manejar este evento de alguna manera?
- ¿Qué sucede en términos de desenrollado de la pila y desasignación de objetos estáticos/globales?
Respuesta
EDITAR: SIGINT, not SIGTERM. Y Assaf informa que no se destruyen objetos (al menos en Windows) para SIGINT sin manos.
El sistema envía un SIGINT. Este concepto se aplica (con alguna variación) para todas las implementaciones de C. Para manejarlo, usted llama a la señal, especificando un manejador de señal. Consulte la documentación sobre la función de señal en Open Group y MSDN.
La segunda pregunta es un poco más complicada y puede depender de la implementación. La mejor opción es manejar la señal, lo que le permite usar delete
y exit()
manualmente.
Gracias. fyi, la página de MSDN a la que vinculó sugiere que el sistema envía un SIGINT (y que NT hacia arriba no envía SIGTERM en absoluto). –
Gracias, Assaf. Corregido –
Además, SIGINT, que se traduce en un ExitProcess, no desencadena la destrucción de ningún tipo de objeto (global, local estático, automático). Si, otoh, traduces sigint a exit(), globals/static será destructor en orden inverso de inicialización (pero no automático). –
Ctrl-C en la aplicación de consola generará una señal. El controlador predeterminado de esta señal llama a ExitProcess para terminar la aplicación. Puede anular este comportamiento estableciendo sus propias funciones de controlador para la señal usando la función SetConsoleCtrlHandler.
+1 por responder la pregunta. –
¿Qué hay de la desasignación de la estática? –
Puede probar si se produce el desenrollado de pila, con algo de código simple:
#include <iostream>
#include <windows.h>
using namespace std;
struct A {
~A() { cerr << "unwound" << endl; }
};
int main() {
A a;
while(1) {
Sleep(1000);
}
}
Tanto si se produce no debe ser dependiente de la implementación, dependiendo de cómo el tiempo de ejecución se encarga de la Ctrl-C. En mi experiencia, no tiene lugar.
¡Buena prueba! Estoy corregido. –
Me resulta difícil confiar en una prueba de este tipo, porque nunca estaré seguro de si el comportamiento será diferente para distintas configuraciones de proyecto (por ejemplo, libs, dlls, nativo, administrado, multihebra y combinaciones de las mismas). Así que preferiría tener la respuesta "verdadera" y no confiar en esa prueba yo mismo. –
No hay una respuesta "verdadera": el estándar C++ no tiene nada que decir sobre este tema, por lo tanto, lo que obtenga siempre dependerá de la implementación. –
- 1. ¿Dibujando en una consola Win32 en C++?
- 2. ¿Qué es exactamente una "Consola"?
- 3. Colores en la consola C++ win32
- 4. Problema de consola Win32
- 5. ¿Cuál es exactamente el Host Runtime?
- 6. FluentNHibernate: ¿Cuál es el efecto de AsSet()?
- 7. ¿Cuál es el efecto de AsEnumerable() en una entidad LINQ?
- 8. ¿Es posible escribir aplicaciones de consola en el esquema?
- 9. Abrir aplicaciones de consola en powershell
- 10. ¿Cuál es el efecto de "*" en expresiones regulares?
- 11. ¿Cuál es exactamente el 'Contexto de ejecución' en JavaScript?
- 12. ¿Cuál es exactamente el significado de "===" en javascript?
- 13. Formas de implementar aplicaciones de consola en C#
- 14. ¿Cuál es el equivalente de POSIX del Mutex de Win32?
- 15. ¿Cuál es el efecto de <authentication mode = "windows"> en las versiones de IIS?
- 16. ¿Cuál es el efecto de std :: nth_element (a.begin(), a.end(), a.end())?
- 17. ¿Es posible utilizar Win32 Hooks en aplicaciones Qt?
- 18. ¿Cuál es la mejor de las aplicaciones de eventos django?
- 19. Consideraciones arquitectónicas en el diseño de aplicaciones de consola?
- 20. Biblioteca para cuadros de diálogo y widgets en la aplicación de consola Win32 (en C)
- 21. ¿Cómo detener el cierre automático de las aplicaciones de la consola C#?
- 22. En aplicaciones de Android, ¿cuál es el papel de "R.java"?
- 23. ¿Cuál es el uso de las etiquetas en C#?
- 24. ¿Cuál es el efecto de configurar timeOffset al animar?
- 25. ¿Cuál es la diferencia entre las aplicaciones basadas en ventanas y las aplicaciones basadas en vista?
- 26. ¿Cuál es el efecto de fillMode siendo kCAFillModeBackwards?
- 27. ¿Cuál es el efecto práctico de viewPager.setOffscreenPageLimit (3) ;?
- 28. ¿Cuál es el efecto de declarar "extern" C "'en el encabezado de una biblioteca compartida de C++?
- 29. ¿Cuál es exactamente el sentido de Expression Trees?
- 30. Servlet: ¿Cuál es exactamente el uso de context.getRealPath ("");
+1: Excelente pregunta :) –
Excelente mango :) –