Arrêt d'un thread

Eithne Messages postés 4 Date d'inscription lundi 14 novembre 2005 Statut Membre Dernière intervention 3 mars 2010 - 2 mars 2010 à 17:19
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 - 3 mars 2010 à 12:56
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

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
3 mars 2010 à 04:15
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 !
0
Eithne Messages postés 4 Date d'inscription lundi 14 novembre 2005 Statut Membre Dernière intervention 3 mars 2010
3 mars 2010 à 11:03
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
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
3 mars 2010 à 11:56
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 !
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
3 mars 2010 à 12:56
« 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...
0
Rejoignez-nous