1 million de particules accessibles en moins de 100 ms...

Soyez le premier à donner votre avis sur cette source.

Vue 3 982 fois - Téléchargée 764 fois

Description

Vous avez dû vous en rendre compte, le résultat d'un appel à une propriété d'un TThread, stockéee sur plus de 2 octets, est très improbable, et parfois imprévisible.

Pour contourner cela, j'ai écris un descendant de TThreadList : TVariables.
Cet object fonctionne comme un tableau de Variant, indicé par un titre, et s'en trouve être threadsafe. En interne, il stocke et gère des instances de TVariable.

Pour le tester, j'ai écris un descendant de TThread : TBreeze, avec trois caractéristiques intéressantes :

1 - L'arrêt se fait par le positionnement de Stop, qui sera à vérifier, par la propriété ByPass, lors des traitements effectués dans la boucle principal. L'avantage, est de profiter de l'état Terminated à False, sachant pourtant que le thread doit se stopper.

2 - Il est prévu une pile de procédures à appeller lors d'un cycle de la boucle principale, ce qui permets d'écrire un traitement dans une procédure "classique", et d'ajouter/de retirer son pointeur de la liste Procedures. Les procédures ainsi ordonnées, seront appellées en séquence à chaque tour de boucle.

3 - Une instance de TVariables y est implémentée

16/05/2012 :
  • TRow, comme promis, permets de gérer des variants représentant un ensemble de valeurs et d'y effectuer des opérations simples (*/+-, opposé...), tout en instaurant une politique actually/objectif/vector, permettant de définir une valeur cible comme destination d'une valeur source, à une vitesse donnée (par un thread)
  • TArray est une extension de TRow, qui permets de définir des tableaux de Variants (threadsafe), et de les retranscrire sous forme texte ou array of array of Variant...
  • TZephyr, est un TBreeze qui sert de support à TForce.
  • TCloud se comporte comme une TThreadList d'objets (particules), dont la particularité est d'être "formé" de n TVapors (et pourtant indicé en continu). Sa structure lui permets la découpe des traitements en TThreads et sous-TThreads...
  • TForce permets d'agir à sa guise, sur un TVapor ou sur un TCloud
  • TDelphes est un composant (pour l'instant', dît test...amené à posséder son propre "décor", voire "relief".


(à suivre)

Source / Exemple :


Le source, livré est composé d'une unité : Delphi.Pas, et d'une fiche : Unit1.pas / .dfm.

L'implémentation de la fiche, démontre l'utilisation de Variables threadsafe, via une pile d'appels de procédures.

Conclusion :


La puissance des TThreads est révélée grâce à la découpe en packets d'objets, pour les traitement en masse d'objets...

No Comments....?

Blueperfect

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_cantador
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
11
je n'ai pas le sentiment d'un souci de perfection de la part de Cirec,
mais simplement le désir de faire des remarques de bons sens sur un source déposé.
Il est tout à fait dans son rôle et compte tenu de sa grande expérience, de sa rapidité de maîtriser un sujet et de son talent, on peut lui faire confiance..

Il est certainement, avec quelques uns, l'un des plus habiles sur Delphi.

Le seul regret qu'on peut émettre est ne pas avoir assuré une compatibilité descendante
des dernières versions de delphi et dès qu'il faut adapter un code sous D7 et le passer sous XE2 ou l'inverse, il faut se livrer à toute une série de contorsions désagréables (en plus du prix..) ce qui fait qu'il y a vraiment aujourd'hui une cassure..

@Jean_Jean:
si tu as l'occasion de regarder une vidéo (en français) montrant toutes les manipulations
d'un exemple de transfert d'un code D7 en XE2, ça te donnera une idée..

A moins que CS offre à ses ouailles, une version XE2 et que l'on balance tous en coeur notre
regretté D7 aux orties.

on pourra ensuite réécrire tous nos programmes..
cs_Jean_Jean
Messages postés
637
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
2
Si j'ai bien compris j'ai du souci à me faire avec XE2...
J'envisage d'acheter la version Starter et plus tard la version Pro.
Oui, c'est vrai que les prix deviennent contraignant pour les amateurs. C'est dommage... La preuve vous vous engueulez pour rien.

Chacun a sa logique et les intérêts sont différents. Le site doit préserver la convivialité car sinon on ne pourra plus échanger et tout le monde y perdra.

J'ai toujours aprécié les conseils des pros et en particulier de Cirec même si je sais que je n'ai pas son niveau! Je comprends son désir de perfection comme quelques autres sur ce site... J'ai aussi une certaine exigeance mais mon travail m'a conduit sur d'autres chemins...

Peace les amis...
blueperfect
Messages postés
237
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2013

1- mon code n as été modifié parce que jean est un
esthéte de la multipicité des types...

2-c pas d7 qui le permets, mais moi qui ne vais pas plus loin qu messagebox...

3-si t as une info sur le traitement par lot, parle ! Sinon casses toi, tu pues...

Ps: tu m aimes ?
Tu m'aimes ?
Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
25 janvier 2020
35
je vois que t'es toujours aussi réfractaire à tout !

maintenant si tu n'as pas compris que tu te trompes et que ça ne fonctionne que parce que D7 permet cette erreur je ne peux plus rien pour toi et si j'ai pris l'exemple du type spécifique TText c'est bien parce que tu y mélanges les types générique et Natif ... et pour finir, écrire du code indépendant de Windows ne dispense pas de le faire proprement.

c'est pas la première fois que tu rejettes tout en bloc ... maintenant le but de déposer un code ici c'est certes de le partager mais aussi de profiter des remarques des autres. C'est pas pour me faire plaisir ou je ne sais quoi. J'utilise pas ton code ... je viens te dire que tu sembles ignorer quelques chose qui fait que ton code déclenche une somme d'alertes impressionnante et ne compile même pas à partir de D2009 ... sur ce ... je passe du temps à t'expliquer et démontrer ton erreur (message que tu n'as manifestement pas lu ou compris vu la réponse)et que la solution est juste de respecter les bases du Pascal ... et tu t'en cognes, tu trouves que c'est bien comme ça ... ok restes dans l'ignorance et l'erreur
... d'ailleurs où en serait le code si je n'avais pointé les fuites !?

tu as gagné c'est la dernière fois que je prend de mon temps (perdu pour rien) pour regarder un de tes codes.
blueperfect
Messages postés
237
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2013

>>version de delphi : désolé, j'ai pas de budget + la plupart du code que j'écris est "indépendant" de Windows...seule quelques fonctions utilisent Windows ou MMSystem voir ShellAPI, sinon, c du pur object-pascal, alors je me permets de rester au niveau compatible D7/W98, même si je développe sur du NT4/W7...

D'ailleurs, j'ai utilisé des types spécifiques (TText)...pour mieux "dériver"...

>>sinon, le reste, ça vient...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.