| |
Classe de support des coroutines La méthode Invoke ne peut avoir qu'une seule exécution à la fois. Elle ne peut ni être appelée dans deux threads différents en même temps ; ni être appelée depuis Execute (ce qui constitue un appel récursif). En revanche, elle peut être appelée successivement par deux threads différents. La propriété Loop détermine le comportement de bouclage de la coroutine. Celle-ci peut soit ne pas boucler (clNoLoop) : un appel à Invoke lorsque Terminated vaut True déclenchera une exception. Soit boucler immédiatement (clImmediate) : dès que Execute se termine, elle est rappelée sans revenir à l'appelant. Soit boucler au prochain Invoke : dans ce cas l'appelant reprend la main entre la fin d'une exécution et le début de la suivante. La procédure Execute devrait tester l'état de Terminating après chaque appel à Yield, et se terminer proprement si cette propriété vaut True. Cette propriété sera positionnée à True lorsque l'objet coroutine devra se libérer, avant de relancer l'exécution. Si un appel à Yield est fait dans cet état, une exception de type ECoroutineTerminating assure que celle-ci se termine immédiatement. La taille de pile doit être un multiple de la taille de page du système (en général 4096) et être supérieure ou égale à 2 fois cette valeur. Toutefois, cela reste peu, et une taille recommandée est donnée par DefaultStackSize. Vous ne devriez en changer que si celle par défaut ne vous convient pas.
|