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 :

Pb avec création d'un thread


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 21
    Points : 16
    Points
    16
    Par défaut Pb avec création d'un thread
    Bonjour,

    je suis entrain de développer une petite appli pour convertir mes enregistrements TNT en XVID. Enfin bref.
    J'aimerais créer un thread pour lancer un programme externe.
    Ma question est que dois-je mettre dans la procedure thread.execute ?

    Alors avant d'utiliser un thread, je lançais mon appli externe comme ceci :

    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
     
    function tform1.LanceAppliAttenteFin(NomFichier:string):boolean;
    var
      StartInfo : TStartupInfo;
      ProcessInformation : TProcessInformation;
    begin
      result:=true;
      ZeroMemory(@StartInfo, sizeof(StartInfo)); // remplie de 0 StartInfo
      StartInfo.cb:=sizeof(StartInfo);
      if CreateProcess(nil,PChar(NomFichier),nil,nil,true,0,nil,nil,StartInfo,ProcessInformation)
    then
        WaitForSingleObject(ProcessInformation.hProcess, INFINITE)// attend que l'application désignée par le handle ProcessInformation.hProcess soit terminée
      else result:=false;
    end;
     
    Procedure tform1.demuxmpg;
    var s:string;
      t:boolean;
    begin
      s:='"C:\Program Files\Java\jre1.6.0_01\bin\java.exe" -jar "'+editprojectx.Text+'" "'+editsource.Text+'"';
      t:=lanceappliattentefin(s);  //<= Ici
    end;
    Là tout larche bien, mais ce programme qui s'éxecute met entre 1 et 10 minutes pour arriver à ses fins et bloque donc mon appli pdt de temps !

    Je voulais donc lancer ceci dans un thread.

    Donc que dois-je mettre dans mon thread.execute ?
    Car je dois dire que je suis un peu perdu !

    Merci pour votre aide.

  2. #2
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    bonjour,

    J'ai déjà du faire ce genre de chose et je n'avais pas utilisé un TThread mais l'API windows CreateProcess.

    Bloon

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    Avril 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 182
    Points : 1 853
    Points
    1 853
    Par défaut Execute
    la méthode Execute pourrait contenir quelque chose comme:
    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
     
    procedure TSecondaryThread.Execute;
    var
      StartInfo : TStartupInfo;
      ProcessInformation : TProcessInformation;
    begin
      ZeroMemory(@StartInfo, sizeof(StartInfo)); // remplie de 0 StartInfo
      StartInfo.cb:=sizeof(StartInfo);
      if CreateProcess('c:\windows\notepad.exe',nil,nil,nil,true,0,nil,nil,StartInfo,ProcessInformation)
      then
      begin
        WaitForSingleObject(ProcessInformation.hProcess, INFINITE) ;// attend que l'application désignée par le handle ProcessInformation.hProcess soit terminée
        Synchronize(form2.AfficheTermine);
      end
    end;
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm2.AfficheTermine;
    begin
      label1.Caption := 'terminé' ;
    end;
    Bruno

Discussions similaires

  1. FAQ : problème avec création d'une requete en VBA
    Par Oluha dans le forum VBA Access
    Réponses: 14
    Dernier message: 14/02/2006, 12h05
  2. Réponses: 11
    Dernier message: 14/02/2006, 00h26
  3. [SQL SERVER]Création table de Login avec création mot pass
    Par MatthieuQ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/01/2006, 12h07
  4. Problème avec création de fenêtre dynamique
    Par FredericB dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/09/2005, 17h21
  5. création de plusieurs threads dans WinMain
    Par ChidoriRasengan dans le forum DirectX
    Réponses: 1
    Dernier message: 15/06/2005, 21h36

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