Dériver une classe en thread, héritage multiple

zwyx Messages postés 146 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 mars 2016 - 9 juin 2010 à 16:52
zwyx Messages postés 146 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 mars 2016 - 23 juin 2010 à 17:43
Bonjour à tous,

J'ai créé une classe, dérivée de TComponent, gérant le calcul séquentiel, pas à pas. En voici un bref extrait:
TCalcul = class(TComponent)
private
  ...
protected
  procedure CalculerProchaineEtape;
  ...
public
  constructor Create(AOwner: TComponent); virtual;
  destructor Destroy; virtual;
  procedure Demarrer; virtual;
  ...
end;

procedure TCalcul.Demarrer;
begin
  ...
  CalculerProchaineEtape;
  ...
end;

procedure TCalcul.CalculerProchaineEtape;
begin
  ...
  CalculerProchaineEtape;
  ...
end;

Je souhaite en dériver une nouvelle classe, disons TCalculThread, mais héritant aussi de TThread. Tout d'abord, est-ce une bonne idée, ou aurais-je de mauvaises surprises à l'exécution ? Deuxièmement, dois-je pour le faire, déclarer une interface ICalcul de ma classe TCalcul pour enfin écrire:
TCalculThread = class(TThread, ICalcul)

Merci pour vos avis ou alertes, si je pars dans une mauvaise direction, car je n'ai encore jamais travaillé sur les thread.

Bien à vous.

3 réponses

Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
11 juin 2010 à 13:10
Bonjour,

Le sujet dépasse mes compétences mais je vais tenter de te dire ce que j'en sais en espérant que cela t'éclairera un peu.

En Delphi, l'héritage multiple stricto sensu n'existe pas car toutes les classes de la VCL descendent de TObject.
Les delphistes utilisent les Interfaces pour y arriver. Il semble donc que tu sois sur la bonne voie.

Quant à la programmation multiThread, sans être très compliquée, elle demande une attention soutenue. On est vite parti dans une boucle sans fin et la multiplication des Threads peut provoquer une dégradation rapide des performances de la machine.
La synchronisation est d'une importance cruciale, et tu utiliseras sans doutes les sections critiques, les événements, les mutex ou les sémaphores pour la synchronisation des tâches.
En tout cas, il est je pense préférable de bien se documenter sur les Threads avant de s'y lancer et de se faire une idée précise du multitâche et de ses concéquences sur le partage de la mémoire car, une fois dans le bain, il est difficile d'apprendre à nager.

Désolé de ne pas pouvoir t'en dire plus,
et bonne chance !
0
cleecky Messages postés 49 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 30 mars 2011
18 juin 2010 à 10:05
Salut !

Je rejoins caribensila ! A mon avis tu devrais pas poster chez les debutants
C'est plus debutant du tout ton truc !!!

Cordialement


@++
0
zwyx Messages postés 146 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 mars 2016
23 juin 2010 à 17:43
Merci bien à vous, Caribensila et cleecky.

Je me doutais que les réponses ne fuseraient pas suite à ma question, comme si j'avais demandé comment convertir un entier en chaîne...

Je connais déjà les termes synchronisation et sections critiques. Par contre, les mutex et sémaphores ne font que me rappeler à quel point on oublie vite ce qu'on a appris. Il faudrait effectivement que je me replonge dans l'étude d'un tutoriel.

Si j'en trouve un assez synthétique, je diffuserai le lien dans ce sujet. Cependant, si un admin passant par là trouve le sujet sans intérêt. Je ne me vexerai pas s'il décide de le supprimer.

Bonne continuation à tous.
0
Rejoignez-nous