Mettre en pause un thread [Résolu]

Lamarmottedu73 19 Messages postés jeudi 26 mai 2005Date d'inscription 14 mai 2009 Dernière intervention - 10 janv. 2008 à 09:26 - Dernière réponse : Guillemouze 1015 Messages postés samedi 25 octobre 2003Date d'inscription 29 août 2013 Dernière intervention
- 10 janv. 2008 à 13:46
Bonjour, 
      Je sais qu'il existe la méthode suspend pour supendre un thread lors de son éxécution. Mais cette fonction suspend directement le thread là où il est.
      Or mon problème est le suivant : J'ai mon thread qui s'éxécute en boucle (Méthode Exucute avec un Tant que thread non terminer faire), dans le code une fonction de traitement doit dès qu'elle est entamer se finir. Or je souhaite que mon utilisateur puisse mettre en pause le thread. Comment faire pour que la pause demander soit prise en compte dès que la fonction de traitement est fini ?

Merci d'avance du coup de main car j'ai essayé plein de possibilité et rien ne fonctionnent réèlement. Dois-je utiliser les sections critiques des threads ?

@+ Sylvain
Afficher la suite 

6 réponses

Répondre au sujet
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 10 janv. 2008 à 10:31
+3
Utile
salut,

tu ajout un champs/methode public à ton thread (genre DemandeDePause : boolean)
et à la fin de ton traitement ( itération), tu le test.
if DemandeDePause  then suspend;

bon code,

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Loda
Guillemouze 1015 Messages postés samedi 25 octobre 2003Date d'inscription 29 août 2013 Dernière intervention - 10 janv. 2008 à 09:45
0
Utile
essaye avec les critical sections de windows
tu cree ta CriticalSection en global avec InitializeCriticalSection

ensuite dans la boucle de ton thread, tu fais un
EnterCriticalSection au debut de la boucle, et
LeaveCriticalSection a la fin

dans ton bouton de pause de la thread, tu fais
EnterCriticalSection
MaThread.Pause;
LeaveCriticalSection

de cette maniere, le code du bouton et le code de la boucle de la thread ne peuvent pas s'executer en meme temps.

PS: je n'ai jamais essayé d'utiliser ces fonctions. C'est juste des suppositions apres lecture de la doc de l'API windows
Commenter la réponse de Guillemouze
zwyx 152 Messages postés jeudi 22 novembre 2007Date d'inscription 21 mars 2016 Dernière intervention - 10 janv. 2008 à 13:07
0
Utile
Bonjour,

Une idée complètement différente, si ça peut s'appliquer dans ton cas...

Tu crées une variable de type booléen en globale. Ce booléen peut être mis à True quand l'utilisateur demande une pause.
Puis, dans la méthode Execute qui tourne en boucle, tu appelles ta deuxième méthode. Dans cette deuxième méthode,  tu testes le booléen  et tu fais un "Exit;" s'il est faux.

Un petit exemple pour expliquer mon charabia.

procedure TForm1.Execute(...);
begin
  while ... do
  begin
    ...
    Interrompre; // appel ta deuxième méthode
    ...
  end; // while
end; // procedure

procedure TForm1.Interrompre(...);
begin
  if EnPause=False then
    Exit;
  ...
end; // procedure

J'espère que ça pourra t'aider.    Bon courage.
Commenter la réponse de zwyx
Lamarmottedu73 19 Messages postés jeudi 26 mai 2005Date d'inscription 14 mai 2009 Dernière intervention - 10 janv. 2008 à 13:39
0
Utile
Merci pour vos réponse, après avoir testé les zones critique pour la méthode de Loda. J'ai retenu la 2eme car elle s'applique le mieux dans mon cas.

@+
Commenter la réponse de Lamarmottedu73
Guillemouze 1015 Messages postés samedi 25 octobre 2003Date d'inscription 29 août 2013 Dernière intervention - 10 janv. 2008 à 13:44
0
Utile
@zwyx : c'est le meme principe que la solution de lloda, sauf que la sienne est plus propre
Commenter la réponse de Guillemouze
Guillemouze 1015 Messages postés samedi 25 octobre 2003Date d'inscription 29 août 2013 Dernière intervention - 10 janv. 2008 à 13:46
0
Utile
@lamarmottedu73 : tout a fait, la methode de lloda est BEAUCOUP plus simple que la mienne, et tout aussi efficace
Commenter la réponse de Guillemouze

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.