begin process at 2012 02 09 07:36:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Système

 > 

Exécution

 > 

Mettre en pause un thread


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Mettre en pause un thread

jeudi 10 janvier 2008 à 09:26:40 | Mettre en pause un thread

Lamarmottedu73

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

jeudi 10 janvier 2008 à 09:45:50 | Re : Mettre en pause un thread

Guillemouze

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

jeudi 10 janvier 2008 à 10:31:56 | Re : Mettre en pause un thread

Loda

Membre Club
Réponse acceptée !
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

Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
jeudi 10 janvier 2008 à 13:07:50 | Re : Mettre en pause un thread

zwyx

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.
jeudi 10 janvier 2008 à 13:39:49 | Re : Mettre en pause un thread

Lamarmottedu73

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.

@+
jeudi 10 janvier 2008 à 13:44:45 | Re : Mettre en pause un thread

Guillemouze

@zwyx : c'est le meme principe que la solution de lloda, sauf que la sienne est plus propre
jeudi 10 janvier 2008 à 13:46:57 | Re : Mettre en pause un thread

Guillemouze

@lamarmottedu73 : tout a fait, la methode de lloda est BEAUCOUP plus simple que la mienne, et tout aussi efficace


Cette discussion est classée dans : fonction, thread, méthode, pause, suspend


Répondre à ce message

Sujets en rapport avec ce message

Libération de ressources [ par nicolaspennaneach ] j'ai une application MDI où chaque fenètre enfant possède un thread pour effectuer certaines opérations. Lorsque j'exécute la méthode formclose d'une Problème à la mise en place d'un thread [ par John Dogget ] Salut à tous.J'utilise une fonction qui récupère l'adresse IP d'un ordinateur à partir d'un site web. Comme cette fonction est dépendante du réseau, s Pb de Thread [ par lo_63 ] Bonjourj'ai une petit question sur les threads.voila je suis en train de cherché un moyen pour executé une fontion qui ce trouve dans un autre thread. A l'aide SVP [ par ludopika ] Bonjour,J'ai un traitement sur un fichier qui contient 500000 lignes.J'aimerai faire ce traitement dans un thread car en fait j'ai50 traitement à fair text [ par Ali_usto ] Salut tout le monde je voudrais savoir kel est la fonction inverse de insert    insert(ch1,ch2,pos);c'est a dire une fonction qui permet de retirer un fonction random [ par silversword666 ] Bonjour, Dans le cadre de mon cours de delphi je dois développer un programme qui en ce qui me concerne, est le jeu du pendu.Je me trouve confronté à affecter un dataSource au dataset d'un datasource :s [ par toonytoun ] Bonjour, comme chaque fin d'année je retourne vers vous pour vos lumières :)j'ai un petit probleme, je souhaite faire une fonction generique me permet un serveur multithread [ par aroslide ] Je suis en train de réaliser un serveur multithread sachant qu'un thread représente un client. quelqu'un aurait il une idée ou un algo pour pouvoir fa Liberation d'un thread [ par OcHre ] Juste une question concernant la libération d'un thread créé depuis ma fiche principale. Si je met la propriété FreeOnTerminate à True (donc je n'appe Aide INDY Choix du thread lors du WriteLn [ par Nostaroth ] Bonjour! Alors voila, je voudrai realisé un Chat Multi-Client et je voudrai que depuis mon serveur, je puisse selectioné le Thread a qui envoyé le mes


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,388 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales