Arrêt d'un thread

Signaler
Messages postés
4
Date d'inscription
lundi 14 novembre 2005
Statut
Membre
Dernière intervention
3 mars 2010
-
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
-
Bonjour !

Voici mon problème : J'aimerais arrêter l'exécution d'un thread que je créé.


procedure Monthread.execute;
begin
//là il fait ce qu'il a à faire. ATTENTION : il n'y a pas de boucle While, ce n'est pas un thread
//qui éxécute une action en boucle mais une instruction longue qu'il execute une seule fois.
end;


...

procedure MaForm.button1(Sender : Tobject);
var
t:MonThread;
begin
//là je lance mon thread
t:=MonThread.create;
end;


procedure MaForm.button2(Sender : Tobject);
begin
//là j'aimerais arrêter le thread que j'ai créé. J'ai déjà essayer : TerminateThread(t.handle,0)
//ça ne fonctionne pas.
end;


Voilà, si quelqu'un peut m'aider à arrêter ce thread ?

Merci !

4 réponses

Messages postés
3792
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
Salut,
pour mettre en pause un thread : Thread.Suspend.
pour reprendre l'exécution d'un thread en pause : Thread.Resume.
On a aussi la propriété Thread.Suspended, modifiable.
Pour tuer définitivement un thread, Thread.Terminate (il faudra le libérer puis le recréer pour le faire marcher).

Cordialement, Bacterius !
Messages postés
4
Date d'inscription
lundi 14 novembre 2005
Statut
Membre
Dernière intervention
3 mars 2010

La fonction Thread.terminate ne marchera pas, notamment à cause du fait que je n'ai pas la boucle (While not Terminated do...)

Et oui, ce que je cherche à faire est bien tuer le thread, et non le suspendre, afin de le relancer plus tard (depuis le début).

Merci de votre aide
Messages postés
3792
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
Mais, t'es obligé de tuer le thread ? Tu peux pas simplement le mettre en pause, nettoyer les variables, puis le redémarrer ? Je veux dire, détruire un thread pour le recréer, c'est vraiment très moche, et pas terrible niveau gestion des ressources

Mais il te faut la boucle while not Terminated do ... ou une de ses variantes. Sinon, evidemment le thread ne peut pas se terminer. Au moins, si tu ne veux pas de boucle, mets un petit "if Terminated then Exit;" là où le thread bosse !

Cordialement, Bacterius !
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
« il n'y a pas de boucle While, ce n'est pas un thread qui éxécute une action en boucle mais une instruction longue qu'il execute une seule fois »

Es-tu sûre qu'il n'y a pas de boucle quelque part ?
Parce qu'uns instruction longue sans boucle, j'ai du mal à me l'imaginer. A moins que le Thread attende un événement quelconque...