ventajas programas programacion programa partes lenguaje informatica ejemplos desventajas descargar caracteristicas delphi shutdown abort

programas - ¿Cómo abortar limpiamente un programa de Delphi?



programacion delphi ejemplos (5)

Después de consultar el código fuente de Delphi Run Time Library y la documentación de Microsoft; Puedo corroborar los comentarios de Mason y Paul-Jan.

La jerarquía de apagado es la siguiente

Application.Terminate() performs some unidentified housekeeping of application calls Halt() Halt() calls ExitProc if set alerts the user in case of runtime error get rid of PackageLoad call contexts that might be pending finalize all units clear all exception handlers call ExitprocessProc if set and finally, call ExitProcess() from ''kernel32.dll'' ExitProcess() unloads all DLLs uses TerminateProcess() to kill the process

Tengo un programa que está teniendo algunos problemas durante el cierre, generando excepciones que no puedo rastrear hasta su origen. Parece estar relacionado con el tiempo y no determinista. Esto ocurre después de que se hayan liberado todos los recursos compartidos, y como se apaga, las pérdidas de memoria no son un problema, por lo que me pregunto si hay alguna manera de decirle al programa que finalice de manera inmediata y silenciosa después de liberar los recursos compartidos, en lugar de continuar con la secuencia de apagado y dar un cuadro de mensaje de excepción.

¿Alguien sabe cómo hacer eso?


En caso de que la sugerencia de HeartWare de usar ExitProcess () falle, podría ser que esté usando algunas DLL que no responden bien a la DLL_PROCESS_DETACH. En ese caso, intente usar un TerminateProcess (getCurrentProcess, 0);

Una vez que recurra a tales medidas, uno podría preguntarse si la parte "limpia" del título del tema aún se mantiene al escrutinio.


ExitProcess (0)?


Halt (0) solía ser la forma tradicional de decirle al programa que terminara con un efecto inmediato. Probablemente haya una forma más amigable con Delphi de hacerlo ahora, pero estoy 95% seguro de que la detención (0) todavía funciona. :-)


La última vez que tuve que buscar un problema como este fue que el cierre fue el causante de un evento (¿cambiar el tamaño? Ha pasado un tiempo) para disparar en la ventana que está muriendo y tratar de volver a dibujar algo que necesitaba material que ya se había eliminado.