Je ne connais pas le "meilleur" - cela dépend de vos critères. Si vous développez un peu vos besoins, nous pourrions peut-être vous offrir une aide plus spécifique. Entre-temps ...
La méthode la plus simple consiste à autoriser l'objet propriétaire à écrire la requête sur le thread, soit dans une ou plusieurs propriétés, soit par une méthode publique. Les champs de données derrière les propriétés/méthodes ne sont pas directement accessibles par la routine principale Execute: utilisez une méthode appelée par Synchronize() pour copier ces champs de données dans des variables qui peuvent être utilisées par la routine Execute(). J'utilise cette méthode lorsque la vitesse n'est pas l'objectif principal et que l'objet propriétaire n'a pas besoin de mettre en file d'attente plusieurs demandes.
Beaucoup de gens dénigrent en utilisant Synchroniser, mais cela dépend de la fonctionnalité que vous essayez d'atteindre. J'essaie de garder les choses simples jusqu'à ce que les exigences exigent le contraire.
Si le débit est plus important ou si vous avez besoin de chevaucher des demandes, vous pouvez utiliser une file d'attente pour stocker les demandes, avec un accès à la file d'attente contrôlée par un TCriticalSection. Vous pouvez également utiliser TThreadList, directement ou en tant que base pour votre propre stockage typé - je ne suis pas au courant d'un équivalent générique de TThreadList, bien qu'il puisse y en avoir un.
Merci pour votre réponse :) – Ariel32