Threads

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
LOULOU25
Messages : 150
Inscription : mer. 19/mai/2004 20:40

Threads

Message 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
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

Message 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.
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
LOULOU25
Messages : 150
Inscription : mer. 19/mai/2004 20:40

Message 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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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.

:)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
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)]
LOULOU25
Messages : 150
Inscription : mer. 19/mai/2004 20:40

Message 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"
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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 ?
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)]
LOULOU25
Messages : 150
Inscription : mer. 19/mai/2004 20:40

Message par LOULOU25 »

Non c'est la même fenetre du même programme mais qui affiche des données différentes
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

Message par ZapMan »

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
LOULOU25
Messages : 150
Inscription : mer. 19/mai/2004 20:40

Message 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 ?
Avatar de l’utilisateur
ZapMan
Messages : 460
Inscription : ven. 13/févr./2004 23:14
Localisation : France
Contact :

Message 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
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
Répondre