Bonjour,

Je voudrais réaliser un petit programme qui teste si un autre programme est en cours de fonctionnement, ou a planté, pour le relancer si besoin est.
Avec les classes System.Diagnostics.Process, il est facile d'interroger la valeur HasExited ou Responding d'un process.
Mon problème est le suivant : si mon process ciblé est en train de dormir pour un temps infini ou très long, ou est interblocké par des sémaphores mal faits (il est donc devenu inutilisable, autrement dit planté, d'après moi), et bien "Responding" répond toujours <true>. Ce n'est donc pas un test fiable dans ce cas !
Comment détecter (à part à la main, en écrivant régulièrement dans un log par exemple), qu'un process est endormi ou bloqué ?

Autre possibilité : tester le WaitState de la collection des ProcessThreads du processus ciblé. Malheureusement, un process non bloqué, mais qui ne fait rien (l'interface graphique attend un événement) répond Wait... donc n'est pas différenciable d'un sleep erroné.

Une idée ? Merci !

+
Chacha

Précision : c'est le mainthread de mon processus qui est endormi/bloqué. Il peut y avoir des threads en tâche de fond, qui, eux, ne sont pas bloqués (mais n'ont pas d'intérêt si l'interface ne répond plus)

Précision : en fait si mon thread est bloqué à cause d'un System::Threading::Thread::Sleep(longtemps), là ça marche. En revanche, s'il est bloqué par un System::Threading::Monitor::Wait(this); là c'est pas bon : il est toujours marqué comme "Responding". J'ai essayé d'autres techniques de test, comme SendMessageTimeout, mais le comportement est le même.