Mettre en pause un thread [Résolu]

Messages postés
19
Date d'inscription
jeudi 26 mai 2005
Dernière intervention
14 mai 2009
- 10 janv. 2008 à 09:26 - Dernière réponse :
Messages postés
1015
Date d'inscription
samedi 25 octobre 2003
Dernière intervention
29 août 2013
- 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 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
30 juillet 2009
- 10 janv. 2008 à 10:31
3
Merci
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.

Merci cs_Loda 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de cs_Loda
Messages postés
1015
Date d'inscription
samedi 25 octobre 2003
Dernière intervention
29 août 2013
- 10 janv. 2008 à 09:45
0
Merci
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
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Dernière intervention
21 mars 2016
- 10 janv. 2008 à 13:07
0
Merci
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
Messages postés
19
Date d'inscription
jeudi 26 mai 2005
Dernière intervention
14 mai 2009
- 10 janv. 2008 à 13:39
0
Merci
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
Messages postés
1015
Date d'inscription
samedi 25 octobre 2003
Dernière intervention
29 août 2013
- 10 janv. 2008 à 13:44
0
Merci
@zwyx : c'est le meme principe que la solution de lloda, sauf que la sienne est plus propre
Commenter la réponse de Guillemouze
Messages postés
1015
Date d'inscription
samedi 25 octobre 2003
Dernière intervention
29 août 2013
- 10 janv. 2008 à 13:46
0
Merci
@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.