2015-10-13 1 views
1

Pourquoi ne puis-je pas exécuter deux fois ou plus mon thread. (Le deuxième appel du code ne fonctionne pas). Dans la procédure "Exécuter" il n'y a pas de boucle et se comporte comme si tout le temps fonctionnait.Pourquoi ne puis-je pas exécuter deux fois ou plus mon thread?

procedure TMyThread.Execute; 
begin 
do_something(); 
end; 


procedure TForm1.Do; 
var DrawerA:TMyThread; 
begin 

DrawerA:=TMyThread.Create(True); 
DrawerA.Priority:=tpNormal; 
DrawerA.FreeOnTerminate:=False;   


DrawerA.Start; 
DrawerA.WaitFor; 


DrawerA.Start; 
DrawerA.WaitFor; 

{ 
if(Not DrawerA.Suspended) then DrawerA.Start 
else DrawerA.Resume;  
} 

end;

+0

"Le deuxième appel du code ne fonctionne pas" - Recevez-vous une exception? Quel est le mauvais comportement exact auquel vous faites face? – Wosi

+2

Après l'exécution de tout le code de la méthode Execute, votre thread ne peut pas être redémarré. Vous devrez libérer et créer une autre instance du type de thread dont vous avez besoin. Il est courant d'inclure while while Terminated do begin ... fin autour du code dans la méthode Execute afin d'utiliser un thread plusieurs fois sans avoir à le recréer. – Radamer

+1

Vous pouvez répondre à votre propre question et l'accepter. – Wosi

Répondre

0

Un thread exécute sa procédure de thread, puis se termine. Si vous souhaitez qu'un thread exécute plusieurs tâches, vous devez créer l'itération dans la procédure de thread.