Lamarmottedu73
Messages postés19Date d'inscriptionjeudi 26 mai 2005StatutMembreDernière intervention14 mai 2009
-
10 janv. 2008 à 09:26
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 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 ?
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 10 janv. 2008 à 10:31
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.
zwyx
Messages postés146Date d'inscriptionjeudi 22 novembre 2007StatutMembreDernière intervention21 mars 2016 10 janv. 2008 à 13:07
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