Threads
Threads
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
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
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.
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.
Tout obstacle est un point d'appui potentiel.
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
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
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
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
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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
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"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
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
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 ?
la fenêtre qui doit être capter par la dll, c'est une fen Pb ou pas ?
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Pourquoi n'envoie-tu pas ton code ?
Tout obstacle est un point d'appui potentiel.
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
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
Tout obstacle est un point d'appui potentiel.
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm
Bibliothèques PureBasic et autres codes à télécharger :https://www.editions-humanis.com/downlo ... ads_FR.htm