UNE FENÊTRE DEBUG POUR VOS APPLICATIONS MULTI-THREAD

VoicedMirror Messages postés 5 Date d'inscription samedi 28 octobre 2000 Statut Membre Dernière intervention 21 octobre 2009 - 9 sept. 2009 à 22:38
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 - 10 nov. 2009 à 10:41
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/50545-une-fenetre-debug-pour-vos-applications-multi-thread

JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
10 nov. 2009 à 10:41
Pour info : A la demande de VoicedMirror, ses contributions ont été effacées.
Il se peut donc que la conversation semble incohérente.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
29 sept. 2009 à 13:58
@Voiced

Peut-être dans le cas où on est amené à devoir synchroniser deux Threads secondaires partageant une même ressource, les fibers seront plus performants que des sections critiques qui coûtent quand même entre 10 à 15 cycles d'horloge à chaque entrée et sortie. Mais c'est à vérifier.

Allez, hop ! Je mets ça en position 96 dans mon ToDo ! lol
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
29 sept. 2009 à 12:19
@Voiced
Si tout le monde maîtrisait la langue française comme toi, le forum de delphifr deviendrait un paradis! :)))

Et, faisant habituellement et honteusement mes tests sous environnement Delphi, je retiendrai ta leçon.

PS:
Au sujet des fibers, il y a peu de situations dans lesquelles elles sont plus intéressantes qu'une architecture à plusieurs Threads. Elles peuvent cependant devenir intéressantes si on a besoin de tirer profit du contexte lié à l'existence de piles et de registres CPU distincts sans avoir à gérer la synchronisation des Threads. Mais j'avoue que c'est une situation que je n'ai jamais encore rencontrée.
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
26 sept. 2009 à 03:35
Salut,

J'ai pas encore testé le source, donc je n'en dirai rien.

Mais j'interviens à propos de la priorité des Threads car il me semble qu'il y a une incompréhension récursive à ce sujet.
En règle générale, la largeur de la tranche d'exécution d'un thread dépend de la combinaison entre la priorité du processus qui l'a créé (classe de priorité) et la priorité du thread lui-même (priorité relative).
Ces priorités sont en fait des valeurs numériques (signés pour les priorités relatives). Quand on additionne ces deux priorités, on obtiend la priorité globale du Thread (c'est la raison pour laquelle on appelle aussi la priorité relative "priorité delta").
De ce fait, la priorité globale d'un thread peut aller de 1 à 31.
Mais, sans vouloir entrer dans le détail, il faut savoir que la règle générale d'addition de ces deux priorités a des exceptions, comme toutes les règles. Par exemple, un thread qui possède la priorité tpIdle aura une priorité globale de 1, quelque soit sa classe de priorité. Un thread ayant la priorité tpTimeCritical aura une priorité globale de 15, quelque soit sa classe de priorité. Le maxi (31) étant obtenu avec la combinaison de la classe Realtime + tpTimeCritical. On peut s'amuser à essayer ce mélange détonnant... mais on ne rit jamais très longtemps. En effet, la plupart des threads du système d'exploitation fonctionnent dans une classe inférieure.
Bref, jouer avec les priorités n'est pas anodin.

J'ajouterai que la priorité d'un Thread qui attend un événement externe et celle d'un thread qui effectue des calculs à tire-larigot n'ont pas du tout le même effet. Et cette remarque est aussi valable pour le nombre de threads que le système peut supporter. C'est un peu comme une ligne de bus en ville: les bus circulent toujours bien malgré le nombre de personnes qui attendent aux arrêts. Mais si on faisait monter tout le monde, ça commencerait à gêner le chauffeur aux entournures et à foutre le bordel un peu partout...
Windows et RATP = même combat !

@ LONDONIC
Le Pascal est à la logique le contraire de ce que tu es à la rhétorique. ^^ ;)

PS:
J'oubliais...
Il me semble qu'un Sleep(xxx) dans un Thread est une aberration. En effet, un Sleep dans un thread a pour effet de passer la main au thread suivant dans le sheduler. D'ailleurs, on utilise à cet effet Sleep(0) en général.
Ceci dit sous réserve, car je n'ai jamais approfondi ce sujet.
Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009
10 sept. 2009 à 14:47
RE voiced 13:42
Géant tu veux dire. PC était la copie industrielle. Je galérais en Basic dont le nombre d'instructions égalais celui des commandes du Dos pendant que la Pomme innovait dans la robotisation: Je sais pas si l'humain conserve des postes dans le cablage.
Si la segmentation collait au multiplexage et laissait plus de codes du temps qu'on pouvait encore intégrer la logique dans un boitier à soudure manuelle, nous savons que la véritable raison du succès est la conivence avec IBM qui représentait encore quarante pour cent de mon chiffre en informatique quand j'ai abandonné le commerce paternaliste allemand.
Si Mac-Intosh avait démocratisé le développement d'interfaces avec un clavier matriciel à grosses touches avec des étiquettes reliant l'ouverture du tiroir à l'utilisateur, ça aurait peut-être marché.
De nos jours, les principes chinois imposent un contrôle plus sévère, et donc un retour probable aux méthode Italiennes de responsabilisation.
Bravo pour le ZX. J'avais préféré le MKD2 de Motorola qu'on achetais tout prêt. L'ICU était trop limité. Je n'ai jamais fini le Protéus de MicroSystèmes. J'ai aterri en TP5.5 avec PC.8088, mélange de ZX et de minibus Apple. Tant pis pour les pilotes, c'était un bon compromis.

Ne perds pas de temps avec mes sources. Je n'avais pas touché un ordinateur depuis si longtemps que je recommence tout. Ces sources sont un galop d'essai: J'ai retrouvé une partie de mes développements dans le Net, et Microsoft ne se donne pas la peine de corriger les erreurs quand il intègre mon Edlin dans son studio. J'ai déja des nouvelles versions pour beaucoup des primitives de ces codes, et quand j'ai voulu les publier en globalisant dans une biblio commune, on m'a réclammé des exemples.
Je voudrais tout refaire à partir de l'Os, en C pour profiter des compétence des fabriquants: J'ai vérifié grace à WPF que le compilateur C bien paramétré peut faire un pascal très acceptable.
Je suis peut-être trop vieux pour apprendre, mais je peux payer un professeur. Je commence à peine le C. J'aimerais en savoir un minimum avant de lancer un service de télé-achat. Je n'aimerais pas voir le service technique victime de la réunionite. (Cause probable de la crise des banques Anglaises en 2008)
Mais je fais trop de roman,
Amitiés, Nic.
Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009
10 sept. 2009 à 13:30
Bonjour VoicedMirror 13:17,
J'ai conservé mon Sorcerer en souvenir, mais le Dos est arrivé avant que je comprenne le S100 (Je préférais l'adressage étendu, mais Apple a toujours été très pompeux)
Cordialement
Nic
Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009
10 sept. 2009 à 13:10
12:50 Le Fruit Français.
A l'occasion du lancement du nouveau EDI C++ de Borland, les développeurs Nantucket ont bénéficié d'une invitation personnelle de Philippe Kan qui avait délaissé son domicile de la Silicon Valley pour sa conférence de Sophia Antipolis. Il a déclaré à mon intention: "Le Pascal c'est fini." J'ai pas compris le reste.
Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009
10 sept. 2009 à 13:00
12:07 Si votre code illustre bien les qualités didactiques du pascal, il utilise Delphi dont l'évolution dépends en grande partie des progrès du MS-DOS. Depuis que ce dernier a été intègré dans Windows3.1, c'est devenu une habitude chez Microsoft d'alièner les développeurs d'Interruptions et leurs émules. C'est aussi transitivement le cas pour Delphi, ce qui lui donne un gros avantage dans la course entre les languages à qui sera le prochain Macro de la bureautique Windows. Le nouveau Basic est plus puissant que le vieux Pascal, mais malgré celà, ce dernier renaît comme Lazare qui aurait suivi son Framework pour convertir l'"OS" concurent qui n'aurait pas su profiter de l'avantage commercial. (Construire sur la démo gratuite d'Un.. d'un "os" professionnel qui a détourné les fonds de la recherche spaciale est très courageux mais parait plus spéculatif que l'espèrance d'exploiter le système)
Le confort m'hypnose mais je consacre la liberté: Je refuse de multiplier la "scrollBar" quand il suffit d'attrapper un cube par un coin pour le faire valser avec une souris.
cordialement
Nic
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 sept. 2009 à 12:07
Laisse-toi séduire par Delphi ... *hypnotise*

Cordialement, Bacterius !
Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009
10 sept. 2009 à 12:04
Re 11:46
Le huitième, L'interface utilisateur. J'apprends le C pour bénéficier de primitives d'affichage graphiques (OpenGl ou autres) et je peux ainsi faire une belle interface avec une table vectorielle de transitions pour communiquer avec les threads du réseau (je leur laisse les processeur inutilisés et une partie plus ou moins importante du "temps" en fonction du mode "Indien semigraphique" ou "Multidimensionnel Americain avec automenu d'accessoires en options" déterminé par le fabriquant de cycles par défaut, par l'utilisateur par besoin.
J'aimerais bien le faire en Pascal, mais j'ai peur de me laisser séduire par Delphi qui me semble reposer de plus en plus sur des bibliothèques au format binaire.
Cordialement
Nic.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 sept. 2009 à 11:46
?
Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009
10 sept. 2009 à 11:36
Re Bactérius 11:17 J'adopte le dernier thread.
Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009
10 sept. 2009 à 11:32
Une seconde, je risque de m'endormir. Autant écarter la création de l'interface, J'apprends Linux pour abandonner le réseau aux pros, et je distingue le nouveau pupitre monoprocesseur assynchrone par son coeur tendre qui se suffira de centièmes pour applanir les perspectives. Un fil devrait suffire pour animer les inter-utilisations.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 sept. 2009 à 11:17
Ajouter un sleep ne fait que cacher le problème. 500 threads c'est trop. En général, une appli n'en a pas plus que 20 au grand max. En général, on se débrouille pour utiliser un thread pour plusieurs tâches. Par exemple, pour MSN (j'invente mais c'est un truc dans le genre) :

1 thread pour gérer la connexion
1 thread pour gérer les préférences
1 thread pour gérer la liste des contacts
1 thread pour les messages persos/avatars
2 threads qui se partagent le travail pour la discussion des contacts
1 thread pour le transfert de fichier
1 thread pour l'interface utilisateur

=> 8 threads.

Je clos aussi la discussion.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 sept. 2009 à 11:01
Tu développes avec des machines hyper puissantes. Ok. Mais on a pas tous les moyens de s'acheter un octal-core 10 GHz avec 32 Go de RAM et 2 téras d'espace disque. Donc je t'engage à proposer un mode "NASA" et un mode "Old-PC" :)
(moi qui me disais qu'avec mon nouveau PC 4 Go RAM 2 GHz j'étais en mesure de défier toutes les sources de CS ... lol)
Et euh modifier la priorité dans ce cas a du sens. Mettre tous tes threads en priorité normale occulte tous les threads qui sont à priorité inférieure. Les mettre à tpIdle n'occulte aucun autre thread, ce qui permet de les executer paisiblement. En tout cas, en changeant la priorité, dans un cas je plante et rien ne s'affiche, dans l'autre j'ai bien les messages qui s'affichent dans la console.

Cordialement, Bacterius !
Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009
10 sept. 2009 à 10:55
Je vous remercie tous pour vos réponses concurrentes, car après vos explications je me souviens avoir vu des méthodes du framework pour règler les priorités. Je ne sais pas si celà me sera très utile car je vais apprendre le langage "C" que les constructeurs semblent avoir adopté à l'unanimité pour l'exploitation de leurs inventions, les autres étant impitoyablement byzutés.
Vos explications éclairent le domaine d'application de telle sorte que je me sentirais beaucoup plus à l'aise pour bricoler mon système à fenêtre et je vous en remercie tous les deux.
Cordialement
Nic.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 sept. 2009 à 10:46
Bon j'ai testé et c'est bien ce que je pensais. Mon ordi a freezé. Car tous les threads sont à priorité tpNormal. En mettant à tpIdle, ça fonctionne très bien.

"FThread[index].Priority := tpIdle;" dans TTestTrace ...

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 sept. 2009 à 10:38
Euh, Londonic, ce sont les unités standard Delphi. Tu as Delphi ? Si non, va falloir traduire ...

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 sept. 2009 à 10:38
Erf owned :p

Cordialement, Bacterius :
Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009
10 sept. 2009 à 10:37
Re VoicedMirror,

Je comprendrais mieux les tenants si la bibliographie suivante m'était contée:
SysUtils, Classes, Forms, Graphics, ExtCtrls, StdCtrls, Controls, et Comctrls.
et les conventions d'usage de l'initiale "T".
Mais à part ça tout va bien, Merci.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 sept. 2009 à 10:37
Londonic, ça dépend de la priorité que tu donnes à tes threads. Le CPU calcule les temps processeur en fonction de la priorité des threads. Le pilote de souris a une priorité "temps-réel", maximum. Il sera traité en premier. Cependant, si tu as d'autres threads (disons 5 ou 6) avec une priorité temps-réel, ta souris risque de ne plus répondre.

Cordialement, Bacterius !
Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009
10 sept. 2009 à 10:23
Bonjour Bacterius,
Si je multiplie les "threads", Je limite donc le contrôle de Windows sur ma souris ?

Merci VoicedMirror: Je comprends que le Thread encapsule beaucoup d'autres structures. Quelle couche ?
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
10 sept. 2009 à 10:18
xD

Cordialement, Bacterius !

PS : pardon pardon je ne pouvais pas m'en empêcher désolé pour le post inutile
Londonic Messages postés 298 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 26 septembre 2009
10 sept. 2009 à 10:14
Merci d'avoir pensé aux débutant que je suis et qui a vraiment de la peine à suivre le fil. J'aurais cru que votre fenêtre pourrait m'éviter de trancher le jouc de Gordias, et résoudre mes démélées avec Windows qui veut bien me laisser le contrôle des boutons de ma souris, mais se réserve les déplacements sur un "Thread" privé. Il ne me serait pas venu à l'idée de limiter leur nombre, et en lisant votre "à propos", j'ai aprécié tout particulièrement votre idée d'en faire un tableau, ce qui me semble le meilleur moyen de monobster les embrouilles de la récursivité.
Votre programme et un exemple de sobriété: Je viens du basic, dont La syntaxe, merveilleux exercice didactique, est inversée et oblige à multiplier les explications pour devenir lisible. ("C" sans dire)
Votre code faisant la promotion de leur application, je suis déçu de ne pas y trouver les sources de vos "Units".
Je vous accorde cinq points pour le sujet et une prime de 2 points pour le Pascal a laquelle je retranche un point pour l'avoir traité avec Delphi.