Salut tout le monde,
Petit question, est ce que quelqu'un a déjà eu un problème pour arreter un thread ?
Moi j'utilise la fonction "Terminate" dans mon thread, et il ne s'arrete pas.
Je peux mettre un petit bou de code s'il faut.
Merci.
Salut tout le monde,
Petit question, est ce que quelqu'un a déjà eu un problème pour arreter un thread ?
Moi j'utilise la fonction "Terminate" dans mon thread, et il ne s'arrete pas.
Je peux mettre un petit bou de code s'il faut.
Merci.
C'est le thread lui même qui doit consulter cette propriété et décider de se terminer. Il n'y a rien d'automatique avec cette méthode.
La manière brutale peut être d'utiliser l'API TerminateThread mais c'est déconseillé, car les ressources qui lui ont été allouées ne sont pas libérées...
Alors comment puis je faire pour arretre le thread de manière propore ?
Defini la propriété FreeOnTerminate à true dans la methode Create du thread:
constructor MonThread.Create(Suspended:boolean);
begin
FreeOnTerminate:=true;
inherited create(suspended);
//Code de création
end;
Alors comment puis je faire pour arretre le thread de manière propre ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure TMyThread.Execute; begin while not Terminated do DoSomething; end;
Moi par defaut j ai dis a mon thread de ne pas s arreter tout seul donc ta méthode ne fonctionne pas
Personne n'a jamais été confronté a ce problème ???
Le principe de l'arrêt d'un thread TThread, c'est justement de faire appel à la méthode Terminate. Cette méthode ne termine pas réellement le thread, pour des raisons de sécurité. Elle positionne la valeur de la propriété Terminated (de type boolean et read-only) à True.
Dans le code du thread (donc dans la méthode Execute et ses sous-méthodes), il faut (si tu veux pouvoir le terminer à Terminate) de temps en temps (c'est à toi de voir ce que veut dire de temps en temps, par exemple comme condition d'une boucle) vérifier que Terminated vaut toujours False. Dans le cas contraire, il faut stopper le thread (par exit ou Break notamment).
J'espère que c'est un peu plus clair comme ça
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager