1 MILLION DE PARTICULES ACCESSIBLES EN MOINS DE 100 MS...

Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
- - Dernière réponse : cs_cantador
Messages postés
4992
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
- 24 mai 2012 à 15:21
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/54285-1-million-de-particules-accessibles-en-moins-de-100-ms

Afficher la suite 
dubois77
Messages postés
675
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
637
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+
blueperfect
Messages postés
237
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2013
-
Jj>en fait j ai amélioré les classes (locking plus efficace), traitement par lot sur des listes de listes...en finition avant publication...
Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
32 -
Salut,

pour commencer toute une série d'avertissements:
Heracles.pas(274) Conseil: H2164 La variable '_apply_should_raise_an_event_local
ly_for_every_slice' est déclarée mais jamais utilisée dans 'TForce._OverVapor'
Heracles.pas(431)
Ethera.pas(512) Avertissement: W1057 Transtypage de chaîne implicite de 'TText'
en 'string'
Ethera.pas(785) Avertissement: W1057 Transtypage de chaîne implicite de 'TText'
en 'string'
Ethera.pas(818)
Eole.pas(547) Avertissement: W1057 Transtypage de chaîne implicite de 'TTextAxis
' en 'string'
Eole.pas(547) Avertissement: W1058 Transtypage de chaîne implicite avec perte de
données potentielle de 'string' en 'TTextAxis'
Eole.pas(603)
Delphes.pas(151)
Chaos.pas(355) Avertissement: W1058 Transtypage de chaîne implicite avec perte d
e données potentielle de 'string' en 'TTextAxis'
Chaos.pas(468) Avertissement: W1057 Transtypage de chaîne implicite de 'TText' e
n 'string'
Chaos.pas(480) Avertissement: W1058 Transtypage de chaîne implicite avec perte d
e données potentielle de 'Variant' en 'TTextAxis'
Chaos.pas(579) Avertissement: W1057 Transtypage de chaîne implicite de 'TTextAxi
s' en 'string'
Chaos.pas(581) Avertissement: W1058 Transtypage de chaîne implicite avec perte d
e données potentielle de 'string' en 'TText'
Chaos.pas(635) Avertissement: W1057 Transtypage de chaîne implicite de 'TTextAdd
ress' en 'string'
Chaos.pas(635) Avertissement: W1058 Transtypage de chaîne implicite avec perte d
e données potentielle de 'string' en 'TTextAddress'
Chaos.pas(668) Avertissement: W1057 Transtypage de chaîne implicite de 'TTextAdd
ress' en 'string'
Chaos.pas(668) Avertissement: W1057 Transtypage de chaîne implicite de 'TTextAdd
ress' en 'string'
Chaos.pas(690) Avertissement: W1057 Transtypage de chaîne implicite de 'TText' e
n 'string'
Chaos.pas(690) Avertissement: W1058 Transtypage de chaîne implicite avec perte d
e données potentielle de 'string' en 'TText'
Chaos.pas(876) Avertissement: W1057 Transtypage de chaîne implicite de 'TTextAxi
s' en 'string'
Chaos.pas(886) Avertissement: W1057 Transtypage de chaîne implicite de 'TText' e
n 'string'
Chaos.pas(919) Avertissement: W1057 Transtypage de chaîne implicite de 'TText' e
n 'string'
Chaos.pas(919) Avertissement: W1057 Transtypage de chaîne implicite de 'TTextAxi
s' en 'string'
Chaos.pas(919) Avertissement: W1058 Transtypage de chaîne implicite avec perte d
e données potentielle de 'string' en 'TTextAxis'
Chaos.pas(1176) Avertissement: W1058 Transtypage de chaîne implicite avec perte
de données potentielle de 'Variant' en 'TTextAxis'
Chaos.pas(1177) Avertissement: W1058 Transtypage de chaîne implicite avec perte
de données potentielle de 'Variant' en 'TTextAxis'
Chaos.pas(1356) Avertissement: W1057 Transtypage de chaîne implicite de 'TTextAd
dress' en 'string'
Chaos.pas(1444) Avertissement: W1057 Transtypage de chaîne implicite de 'TText'
en 'string'
Chaos.pas(1525) Avertissement: W1058 Transtypage de chaîne implicite avec perte
de données potentielle de 'Variant' en 'TText'
Chaos.pas(1529) Avertissement: W1058 Transtypage de chaîne implicite avec perte
de données potentielle de 'string' en 'TText'
Chaos.pas(1532) Avertissement: W1058 Transtypage de chaîne implicite avec perte
de données potentielle de 'string' en 'TText'
Chaos.pas(1534) Avertissement: W1058 Transtypage de chaîne implicite avec perte
de données potentielle de 'Variant' en 'TText'
Chaos.pas(1548) Avertissement: W1057 Transtypage de chaîne implicite de 'TText'
en 'string'
Chaos.pas(1588) Avertissement: W1057 Transtypage de chaîne implicite de 'TText'
en 'string'
Chaos.pas(1588) Avertissement: W1057 Transtypage de chaîne implicite de 'TText'
en 'string'
Chaos.pas(1588) Avertissement: W1057 Transtypage de chaîne implicite de 'TText'
en 'string'
Chaos.pas(1588) Avertissement: W1058 Transtypage de chaîne implicite avec perte
de données potentielle de 'string' en 'TText'
Chaos.pas(1599)
Unit1.pas(46) Avertissement: W1058 Transtypage de chaîne implicite avec perte de
données potentielle de 'Variant' en 'TTextAxis'
Unit1.pas(138) Avertissement: W1057 Transtypage de chaîne implicite de 'TText' e
n 'string'
Unit1.pas(139) Avertissement: W1057 Transtypage de chaîne implicite de 'TText' e
n 'string'
Unit1.pas(140) Avertissement: W1057 Transtypage de chaîne implicite de 'TText' e
n 'string'
Unit1.pas(141) Avertissement: W1057 Transtypage de chaîne implicite de 'TText' e
n 'string'
Unit1.pas(145)
Project1.dpr(15)

Mais le pire c'est ça:
---------------------------
Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:

13 - 20 bytes: TList x 2, AnsiString x 3, Unknown x 1
21 - 28 bytes: AnsiString x 32
29 - 36 bytes: UnicodeString x 2, AnsiString x 1, Unknown x 18
37 - 44 bytes: TThreadList x 2, UnicodeString x 17, AnsiString x 1
45 - 52 bytes: UnicodeString x 2, AnsiString x 9
53 - 60 bytes: UnicodeString x 1
61 - 68 bytes: UnicodeString x 20
69 - 76 bytes: TStringList x 23, UnicodeString x 199, AnsiString x 1
77 - 84 bytes: UnicodeString x 92
101 - 108 bytes: AnsiString x 1, Unknown x 1
117 - 124 bytes: TBreeze x 1, TVariable x 10, TRow x 12
125 - 132 bytes: TArray x 1
1149 - 1260 bytes: Unknown x 3

---------------------------
OK
---------------------------

Normalement je donne les solutions mais malheureusement
l'indentation exotique, l'implicite rendu explicite et le manque de commentaires
transforment une simple tâche de débogage en une longue et fastidieuse opération
à laquelle je n'ai pas le temps nécessaire à accorder.
blueperfect
Messages postés
237
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2013
-
Les memory leaks sont résolus dans une version imminente...

Quelle version de Delphi...?

Avec D7perso, toutes warnings on, je n'obtiens aucun message d'erreur ou d'avertissement à la compilation...

Je compte fournir un packet plus sécurisé d'ici peu...

Pour la partie déboguage, le plus important est le principe : stocker des variants dans une threadlist de façon à contourner le barrage inter-threads...
Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
32 -
ok

"Quelle version de Delphi...?" D2009 (Unicode)
pour les "Warnings" c'est tout simple ... ça vient d'une erreur (mauvaise habitude)
qui est très répandue chez les utilisateurs de versions antérieurs à D2009.

Pour les chaines de caractères il y a, ceux que j'appelle, les types NATIFS et les GÉNÉRIQUES.

Pourquoi "les Natifs" ?
Windows étant écrit en C, ils correspondent aux types acceptés et retournés en paramètre par les fonctions et procédures natives Windows qui traitent avec les chaines de caractères.
les types de variables:
AnsiChar
WideChar

et les versions pointeurs:
PAnsiChar = ^AnsiChar
PWideChar = ^WideChar

il existe 2 versions de chaque Procédures et fonctions de windows qui demandent ou renvoient une chaine de caractères en paramètre (Ex.):
MessageBoxA
MessageBoxW

Les génériques ont été introduits par Borland dès le début (pour Delphi)
Delphi déclare essentiellement 2 types générique. 1 pour les types de variables ci-dessus et l'autre pour les procédures et fonctions de windows.
le générique:
Char
string
et sa version pointeur
PChar

Procédures et fonctions de windows version gégérique:
MessageBox

Les versions antérieurs à D2009 sont toutes en AnsiChar
et donc les génériques pointent tous sur de l'Ansi:

Char = AnsiChar
PChar = PAnsiChar
string = AnsiString
et
MessageBox = MessageBoxA


à compter de D2009 ont est en Unicode (WideChar)
et donc les génériques pointent tous sur du Wide:

Char = WideChar
PChar = PWideChar
string = WideString
et
MessageBox = MessageBoxW

donc quand tu écris:
Result := Windows.MessageBox( Forms.Application.Handle,
PAnsiChar(_text), PAnsiChar(_title),
Windows.MB_YESNO
) = Windows.ID_YES;

sous D7 ça passe ... mais sous D2009 ça ne compile même pas !!!
en fait c'est comme si tu voulais faire ceci sous D7 (ça plante aussi)
Result := Windows.MessageBoxW( Forms.Application.Handle,
PAnsiChar(_text), PAnsiChar(_title),
Windows.MB_YESNO
) = Windows.ID_YES;

Autre erreur courante:
type
TText = AnsiString;

MonCompo = class(...
FText: TText;
...

procédure SetText(const aText: string);

Mais le portage entre version est très simple ... ça se résume à:
ne pas mélanger les types ou alors seulement si tu sais exactement ce que tu fais
on écrira donc :
Result := Windows.MessageBox( Forms.Application.Handle,
PChar(_text), PChar(_title),
Windows.MB_YESNO
) = Windows.ID_YES;

et
type
TText = string;

MonCompo = class(...
FText: TText;
...

procédure SetText(const aText: string);

là ça passe pour toutes les versions de Delphi même XE2

Voilà je résume ... on utilise que les génériques (pour les procédures et fonctions on le fait déjà machinalement):
Char
PChar
String

et surtout ne pas les mélanger avec les natifs.

j'espère avoir été assez clair sur le principe, l'utilité et l'emploi du générique.
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...
Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
32 -
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
-
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 ?
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...
cs_cantador
Messages postés
4992
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9 -
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..