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

Soyez le premier à donner votre avis sur cette source.

Vue 3 906 fois - Téléchargée 724 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

dubois77
Messages postés
693
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
10 -
Salut Blueperfect
c'est sympa mais ou est la source ?
cordialement
blueperfect
Messages postés
237
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2013
-
In the zip...
hellala
Messages postés
3
Date d'inscription
jeudi 31 août 2006
Statut
Membre
Dernière intervention
3 juillet 2012
-
Hi blueperfect
nice work but did not grasp te utility exactly
can you clarify it please using a practical example

sorry I am not really expert but a good beginner


Thanks
blueperfect
Messages postés
237
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2013
-
The real interrest resides in the accessibility of thread variables, other than boolean and word, even between processes.

As the Variables are accessed through an indirection of a threadlist, their access become (suddenly) threadsafe...

The next "chapter", is the use of the Variant that stores the Variable value, to reflect an axis of value ('1 2 3' will mean a triplet), then, using the TBreeze object, to implement a self-fading variable... so the end-user will only have to write down :

...
Variables['XYZ'].This := '0 0 0';
Variables['XYZ'].Zephyr := '10/20ms';
Variables['XYZ'].Objectif := '100 100 100';
....

that will produce at runtime an evolution of the triplet '0 0 0' to '100 100 100', at a speed of adding 10 every 20ms...

But that is far (not so far) from the first steps...
cs_Jean_Jean
Messages postés
641
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
2 -
Salut BluePerfect, je viens de voir ton code!
Je vais y regarder de plus près car je cherche moi aussi des solutions faciles à mettre en oeuvre.
yo, Delphifr devient bilingue!

Hello Blue, I have just seen your code!
I am going to look at it closer because I look too for solutions easy to implement.Delphifr becomes bilingual!

A+

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.