Je m'attendais à ce que en utilisant Loop
propriété je peux définir si la méthode d'événement OnRun
est exécutée à plusieurs reprises, mais malgré tout, il est toujours répéter jusqu'à ce que j'appelle la méthode Terminate
. Ai-je manqué le point de cette propriété ou il y a un bogue dans le composant IdThreadComponent?Qu'est-ce que la propriété IdThreadComponent Loop?
Répondre
interne, TIdThreadComponent
exécute un TIdThread
, qui a en fait 2 boucles dans sa méthode Execute()
:
Une boucle externe est une boucle
while not Terminated
habituelle.A l'intérieur de cette boucle, il vérifie d'abord si la méthode
Stop()
a été appelé à suspendre le fil, puis (après le réveil si arrêté), il vérifieLoop
pour déterminer si la méthodeRun()
doit être appelé une fois ou en une boucle.
Ainsi, la propriété Loop
n'a pas vraiment beaucoup d'effet dans TIdThreadComponent
, en raison de la boucle while not Terminated
extérieure. Tout ce qu'il fait vraiment, c'est de contrôler à quelle fréquence le thread vérifie sa propriété Stopped
pour savoir quand se mettre en veille, si jamais.
La logique Loop
est principalement destinée à être utilisée par TIdTCPServer
à la place, pour contrôler si son événement OnExecute
est déclenché une fois ou plusieurs fois pour chaque connexion client acceptée.
Donc, j'ai à peu près mal compris la signification de la propriété. Merci! – Tracer
Pas votre faute. Ce n'est pas un comportement bien documenté –
Que voulez-vous accomplir? Fournissez-nous un MVCE. – RBA