![]() |
como saber si un programa esta colgado
Hola a tod@s
Necesitaría saber desde un programa escrito en delphi7 si otro programa tambien en delphi7 se encuentra colgado o no responde porque esta haciendo una larga tarea y aun no ha terminado. de esta manera si esta colgado prodia matar el prosceso y ejecutarlo de nuevo. gracias |
y ¿como sabes que Windows no miente?
Yo hice un programa que copiaba muchos megabytes de unas carpetas a otro, no hacía un "application.processmessages" para no alargar los ciclos más de lo necesario, y entonces Windows decía que "el programa no responde". Realmente el programa funciona muy bien, pero dado que no procesa los mensajes de la cola hasta terminar la operación de copiado, Windows se quejaba. Moraleja: Si el programa "no responde", pero hace su trabajo bien, deja que termine. Si la operación necesita más tiempo.... es que necesita más tiempo. Saludos |
Una forma seria enviadole un mensaje al programa y que te devuelva una respuesta de que esta vivo.
Podrias usar cualquiera de los metodos de comunicacion entre aplicaciones que se hablo varias veces en el foro. |
Cita:
// Saludos |
pero eso porque el quiere evitar el tiempo que le consume el ProcessMessages (que tampoco es tan grande) u otra alternativa como con multihilo. Algo tenes que ceder. No podes esperar que responda si no procesa los mensajes.
|
Pero el ejemplo de Lepe, en mi opinión, lo que a final de cuentas muestra es que no hay una forma precisa de determinar si un programa está colgado o no, entendiendo por colgado que ya jamás responderá.
Ahora bien, yo presupuse desde el principio del hilo que no se tiene control sobre el programa "colgable" y que por ello se quiere tener la posibilidad de "matarlo" con otra aplicación. Pero, desde luego, si el código es nuestro, entonces ciertamente donde hay que trabajar es no en matarlo sino en hacer que corra procesos largos en hilos separados. // Saludos |
a ver os cuento:
yo tengo un programa que se minimiza junto al reloj de windows xp y cada cinco minutos conecta con una base de datos firebird 1.5 a través de internet y actualiza datos. el progrma principal es de ventas. entonces no hay nadie pendiente del programa que transmite los datos y hay veces que "por lo que sea" se queda colgado y la tienda deja de transmitir datos. yo lo que quiero es que cada cierto tiempo el programa peincipal compruebe si el de transmisión esta funcionando bien o esta colgado, en cuyo caso quiero que se reinicie. gracias por vuestra ayuda |
pues como dije al principio enviale un mesaje al programa, si responde es xq esta todo bien.
|
Yo más bien creo que como dijo Lepe desde el principio, todo dependerá de como esté hecho el programa que transmite los datos. Si no es multihilos o da tiempo de procesar los mensajes mientras transmite los datos, de poco valdrá mandarle un mensaje para saber si sigue vivo, pues no va a responder mientras no termine de mandar los datos, sin que esto signifique necesariamente que esté colgado.
Y, en mi opinión, más que preocuparse por monitorear al programa de transmisión, yo me ocuparía de ver por qué "lo que sea" detiene al programa. // Saludos |
gracias a todos por vuestra ayuda, intentaré averiguar porque se cuelga, que creo que es cuando se corta la comunicación mientras transmite, y aun así intentaré mandarle un mensaje tambien como propone Crandel.
un saludo |
La franja horaria es GMT +2. Ahora son las 00:37:21. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi