PDA

Ver la Versión Completa : como saber si un programa esta colgado


Spynosa
10-01-2007, 19:38:40
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

Lepe
10-01-2007, 21:16:36
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

Crandel
11-01-2007, 01:45:21
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.

roman
11-01-2007, 02:10:39
Una forma seria enviadole un mensaje al programa y que te devuelva una respuesta de que esta vivo.

Pero ése es justo el problema ¿no? En un caso como el que describe Lepe, no recibirás respuesta del programa, no porque esté colgado sino porque está muy ocupado, pero eventualmente terminará.

// Saludos

Crandel
11-01-2007, 02:43:11
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.

roman
11-01-2007, 02:52:44
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

Spynosa
11-01-2007, 11:53:56
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

Crandel
11-01-2007, 12:30:06
pues como dije al principio enviale un mesaje al programa, si responde es xq esta todo bien.

roman
11-01-2007, 13:44:30
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

Spynosa
11-01-2007, 14:41:25
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