Eithne
Messages postés4Date d'inscriptionlundi 14 novembre 2005StatutMembreDernière intervention 3 mars 2010
-
2 mars 2010 à 17:19
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 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 ?
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 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).
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 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 !
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 201918 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...