Page 1 sur 1

Threads

Publié : mar. 28/sept./2004 9:51
par LOULOU25
Voici mon problême,
Je voudrais tester l'inactivité d'un programme et s'il n'est pas terminé au bout de 3 mm , pouvoir l'interrompre (cas d'un bug qui bloque le programme mais sans erreur).
Je n'ais pas trouver la fonction qui permet de tester via le moniteur de process cette fonction

Publié : mar. 28/sept./2004 10:20
par ZapMan
Voilà une proposition :

Je suppose que la tache susceptible de se planter (que je vais appeler "ThreadTest") comporte une boucle

En début de boucle :
Global TActiv.l
TActiv = Date()

En cours de boucle :
TActiv = Date ()

Et dans un thread séparé :
If (Date()-TActiv)>10 ; le thread testé doit passer par la boucle au moins une fois toute les 10 secondes
KillThread (ThreadTest) ; il s'est planté, on l'execute
CreateThread(@ThreadTestProc(),0) ; on le ressuscite
Endif

J'utilise cette méthode dans DropUpLoad pour débloquer le thread qui se charge des uploads si jamais il est resté en plan.

Dis-moi si ça te semble clair. Dans le cas contraire, poste ton code.

Publié : mar. 28/sept./2004 10:48
par LOULOU25
En fait mon programme boucle non pas dans une boucle mais sur une instruction provenant d'une DLL qui lui demande de rester en pause jusqu'à l'apparition d'une fenêtre spécifique qui n'apparaitra jamais. Le programme reste donc en attente indéfini, dans ce cas il est nécessaire de le casser , c'est pourqoui je recherche une fonction qui permette de connaitre l'état d'execution du programme. Le programme peut bouclé environ un 50 de fois dans mon applic

Publié : mar. 28/sept./2004 11:37
par nico
Comme Zapman le dit, tu mets ton appel à la dll dans un Thread, si la fonction réussi alors tu change l'état d'une variable globale et dans ton prog principale, tu peux alors à tout moment tester cette variable avec un timer par exemple.

:)

Publié : mar. 28/sept./2004 13:08
par Le Soldat Inconnu
Tu testes la présence de la fenêtre (vu que le bug, c'est la fen qui s'ouvre pas si j'ai bien suivi). si elle n'est pas créer au bout de 3 secondes, tu fermes le programmes.

Tu peux tester la présence de la fenêtre à l'aide de la fonction FindWindow_( de l'API
regarde sur Codes-FR la procedure IsRunning (rubrique exécutables) qui est un exemple d'utilisation de cette fonction

Publié : mar. 28/sept./2004 14:20
par LOULOU25
Le Soldat Inconnu a écrit :Tu testes la présence de la fenêtre (vu que le bug, c'est la fen qui s'ouvre pas si j'ai bien suivi). si elle n'est pas créer au bout de 3 secondes, tu fermes le programmes.

Tu peux tester la présence de la fenêtre à l'aide de la fonction FindWindow_( de l'API
regarde sur Codes-FR la procedure IsRunning (rubrique exécutables) qui est un exemple d'utilisation de cette fonction
Non en fait le probleme provient du logiciel que j'utilise et qui teste le nom d'une fenetre du programme et attend que celle-ci soit active avant de passer à la suite. Or dans certain cas le programme est en avance sur les intructions et le programme attend l'appartion d'une fenetre qui est dejà passé. Celà se traduit par une inactivité du programme et c'est là que je voudrais au bout d'un certain nombre de secondes casser l'éxecution du programme. Celà parait compliqué mais en fait mon programme pure basic utilise une dll "Autoitx3.dll"

Publié : mar. 28/sept./2004 15:03
par Le Soldat Inconnu
En calir, tu crée une fenêtre qui disparait trop vite pour que ta lib la voit et ça plante, c'est bien ça.

la fenêtre qui doit être capter par la dll, c'est une fen Pb ou pas ?

Publié : mar. 28/sept./2004 15:07
par LOULOU25
Non c'est la même fenetre du même programme mais qui affiche des données différentes

Publié : mer. 29/sept./2004 3:30
par ZapMan
Pourquoi n'envoie-tu pas ton code ?

Publié : mer. 29/sept./2004 6:23
par LOULOU25
ZapMan a écrit :Pourquoi n'envoie-tu pas ton code ?
Je veux bien mais le code fait environ 1800 à 2000 lignes . Ou puis-je te l'envoyer ?

Publié : mer. 29/sept./2004 21:22
par ZapMan
L'idéal serait que tu fabrique un extrait qui met le problème en relief, de façon à ce que chacun, sur le forum, puisse le voir et proposer sa réponse. Sinon, tu peux me l'envoyer à seproject@soundeditor.com