63 votes

Comment choisir entre les différentes façons de faire du threading dans Delphi ?

Il semble que j'ai finalement réussi à mettre en œuvre une sorte de threading dans mon programme Delphi 2009. S'il n'y avait qu'une seule façon de le faire, je serais déjà prêt. Mais je vois plusieurs possibilités.

Quelqu'un peut-il m'expliquer quelle est la différence entre les deux et pourquoi je choisirais l'une plutôt que l'autre ?

  1. La classe TThread dans Delphi

  2. AsyncCalls par Andreas Hausladen

  3. OmniThreadLibrary par Primoz Gabrijelcic (gabr)

  4. ... d'autres ?


Edit :

Je viens de lire un excellent article de Gabr dans le numéro de mars 2010 (n° 10) de la revue Magazine Blaise Pascal intitulé "Quatre façons de créer un fil". Il faut s'abonner pour avoir accès au magazine, donc, en vertu des droits d'auteur, je ne peux pas reproduire ici quoi que ce soit de substantiel.

En résumé, Gabr décrit la différence entre l'utilisation de TThreads, les appels directs à l'API Windows, les AsyncCalls d'Andy et sa propre OmniThreadLibrary. Il conclut cependant à la fin que :

"Je ne dis pas que vous devez choisir autre chose que la méthode classique de Delphi (TThread) mais il est toujours bon d'être informé des options que vous avez"

La réponse de Mghie est très complète et suggère que OmniThreadLibrary est peut-être préférable. Mais je suis toujours intéressé par les opinions de chacun sur la façon dont je (ou quiconque) devrait choisir sa méthode de threading pour son application.

Et vous pouvez ajouter à la liste :

. 4. Appels directs à l'API Windows

. 5. Misha Charrett Cadre d'application distribué du CSI comme suggéré par LachlanG dans sa réponse.


Conclusion :

Je vais probablement opter pour OmniThreadLibrary. J'aime le travail de Gabr. J'ai utilisé son profileur GPProfile il y a plusieurs années, et j'utilise actuellement son GPStringHash qui fait partie de OTL.

Mon seul souci pourrait être de le mettre à niveau pour qu'il fonctionne avec des traitements 64 bits ou Unix/Mac, une fois qu'Embarcadero aura ajouté cette fonctionnalité dans Delphi.

1voto

Sam Points 1339

Je sais que ce n'est pas la méthode la plus avancée :-) et qu'elle a peut-être aussi ses limites, mais je viens d'essayer System. BeginThread et je l'ai trouvé assez simple - probablement en raison de la qualité de la documentation à laquelle je me référais... http://www.delphibasics.co.uk/RTL.asp?Name=BeginThread (IMO Neil Moffatt pourrait enseigner une chose ou deux à MSDN)

C'est le plus gros facteur que je trouve quand on essaie d'apprendre de nouvelles choses, la qualité de la documentation, et non pas c'est quantité . Il n'a fallu que quelques heures, puis je me suis remis au travail réel plutôt que de m'inquiéter de la façon dont le fil fait son travail.

EDITAR En fait, Rob Kennedy explique très bien BeginThread ici. Structure BeginThread - Delphi

EDITAR En fait, la façon dont Rob Kennedy explique TThread dans le même article, je pense que je vais changer mon code pour utiliser TThread demain. Qui sait à quoi il ressemblera la semaine prochaine ! (AsyncCalls peut-être)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X