IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Composant TBMDThread à la volée


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 33
    Points : 27
    Points
    27
    Par défaut Composant TBMDThread à la volée
    Salut à tous.
    Pour éviter de me prendre le chou avec les threads et les CriticalSections, j'ai décider d'utiliser le composant TBMDThread (gratoche) qui marche nickel.
    ici -> http://www.mitov.com/system/attachme...zip?1447206020

    Cependant, je voudrais créer un TBMDThread "à la volée", c'est-à-dire par code, genre ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
    var
        MyThread : TBMDThread;
    Begin
       MyThread := TDBMThread.create(self);
       MyThread.Name := 'Thread1';
       MyThread.OnExecute = MyExecute;
       ...
    Quelqu'un pourrait-il me fournir quelques lignes avec la déclaration correcte de la procédure 'MyExecute' ?

    Merci les gars.

  2. #2
    Membre habitué Avatar de Laskar
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2002
    Messages : 228
    Points : 139
    Points
    139
    Par défaut
    ... Heu, soit j'ai rien compris, soit tu t'exprimes mal !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.MyExecute(Sender: TObject; Thread: TBMDExecuteThread; var Data: Pointer);
    begin
        // ici ton thread fait quelque chose ...
    end;
    et ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
    var
        MyThread : TBMDThread;
    Begin
       MyThread := TDBMThread.create(nil);
       MyThread.Name := 'Thread1';
       MyThread.OnExecute = MyExecute;
       ...
    Il est où le problème ?

  3. #3
    Membre régulier
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2013
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 190
    Points : 113
    Points
    113
    Par défaut
    Tu trouvera sûrement toutes tes réponses ici :
    http://delphi.developpez.com/faq/?pa...n-thread-Win32

    @+

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Laskar Voir le message
    ... Heu, soit j'ai rien compris, soit tu t'exprimes mal !
    En fait, le problème que j'ai est un poil complexe pour moi. Sans raconter ma vie, voila ce que j'aimerais faire :
    Mon application affiche une forme avec une listbox contenant un nombre variable de liens de téléchargements. L'utilisateur sélectionne un ou plusieurs liens et lance le download.
    Pour l'instant, mon programme télécharge les fichiers un par un. Ca marche mais c'est pas top (et surtout super long !). J'aimerais utiliser le multithreading pour lancer plusieurs téléchargements simultanément. Laskar, si tu as un bout de code qui pourrait me mettre sur la piste ...

    Merci de ton attention.

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 695
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 695
    Points : 13 133
    Points
    13 133
    Par défaut
    Tu n'as pas besoin de section critique pour cela.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    type
      TDownloadThread = class(TThread)
        URL      :string;
        FileName :TFileName;
      protected
        procedure Execute; override;
      public
        constructor Create(aURL :string; aFileName :TFileName; aOnTerminate :TNotifyEvent);
      end;
     
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
      public
        procedure DownloadTerminate(Sender :TObject);
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    uses URLMon;
     
    { TDownloadThread }
     
    constructor TDownloadThread.Create(aURL: string; aFileName: TFileName; aOnTerminate: TNotifyEvent);
    begin
      inherited Create;
     
      URL  := aURL;
      FileName := aFileName;
      OnTerminate := aOnTerminate;
      FreeOnTerminate := TRUE;
    end;
     
    procedure TDownloadThread.Execute;
    begin
      ReturnValue := URLDownloadToFile(nil, PChar(URL), PChar(FileName), 0, nil);
    end;
     
    { TForm1 }
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      TDownloadThread.Create('http://domain.com/file1.txt', 'C:\Path\file1.txt', DownloadTerminate);
      TDownloadThread.Create('http://domain.com/file2.txt', 'C:\Path\file2.txt', DownloadTerminate);
      TDownloadThread.Create('http://domain.com/file3.txt', 'C:\Path\file3.txt', DownloadTerminate);
    end;
     
    procedure TForm1.DownloadTerminate(Sender: TObject);
    begin
      with TDownloadThread(Sender) do
        Memo1.Lines.Add(Format('%s (%d)', [FileName, ReturnValue]));
    end;
     
    end.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    @Andnotor : Super champion ! Ton code me tire du bourbier où je m'étais engagé !
    Solution simple, code limpide et compréhensible.
    Que du bonheur !

    Merci mille fois et vive ce forum !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 22/07/2012, 18h26
  2. Retrouver un composant créé à la volée
    Par DelphiCool dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/06/2008, 07h05
  3. Composant créé à la volée toujours au dessus
    Par dleu dans le forum Composants VCL
    Réponses: 4
    Dernier message: 10/08/2007, 11h01
  4. Changer un composant à la volée.
    Par Invité dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 03/08/2006, 10h15
  5. Dessin à la volée sur composant transparent
    Par orelero dans le forum 2D
    Réponses: 1
    Dernier message: 28/07/2005, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo