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

Langage Delphi Discussion :

[Thread] Actualiser une forme qui se bloque lors de l'exécution


Sujet :

Langage Delphi

  1. #1
    Membre régulier Avatar de Bourak
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 231
    Points : 84
    Points
    84
    Par défaut [Thread] Actualiser une forme qui se bloque lors de l'exécution
    Salut les developpeurs.


    J'ai réaliser une application qui lançe une commande sous dos. La durée d'execution est long se qui bloque l'application. J'ai pensée au thread , et j'ai créer une classe du type Thread à l'aide du Faq Delphi ,mais je ne sais pas comment l'integrer à mon application.


    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Tient, regarde ma fonction CallCmd qui ne bloquera l'application sans la figer, tu pourras même récupérer le texte renvoyé par l'application DOS comme en ligne de commande ...

    Si tu veux vraiement lancer le programme DOS sans attendre son résultat, et sans bloquer l'application, on peut faire ça en Thread (bon, j'ai tapé le code directement sur le forum, des coquilles peuvent trainer ... )
    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
    type
      TCmdThread = class(TTread)
      private
        FCmdDirectory: string;
        FCmdName: string;
        FCmdParam: string;
        FAsyncResult: Boolean;
        FExitCode: Int64; 
        FOutputText: string;
        FErrorText: string;
    protected
        procedure Execute; override;
      public
        constructor Create(const CmdDirectory, CmdName, CmdParam: string); reintroduce;
     
        property AsyncResult: Boolean read FAsyncResult;
        property ExitCode: Int64 read FExitCode; 
        property OutputText: string read FOutputText;
        property ErrorText: string read FErrorText;
      end;
     
    constructor TCmdThread.Create(const CmdDirectory, CmdName, CmdParam: string);  
    begin
      inherited Create(True);
     
      FCmdDirectory := CmdDirectory;
      FCmdName := CmdName;
      FCmdParam := CmdParam;
     
      Resume();
    end;
     
    procedure TCmdThread.Execute; 
    var
      tmpExitCode: Int64; 
      tmpOutputText: string;
      tmpErrorText: string;
    begin
      FAsyncResult := CallCmd(FCmdDirectory, FCmdName, FCmdParam, tmpExitCode, tmpOutputText, tmpErrorText);
      FExitCode := tmpExitCode; 
      FOutputText := tmpOutputText;   
      FErrorText := tmpErrorText;
      Terminated := True;   
    end;

    Ailleurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      CmdThread := TCmdThread.Create('C:\', 'exec.bat', '');  	
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      if CmdThread.Terminated then
        ShowMessage(CmdThread.OutputText)
      else
        ShowMessage('C''est pas fini !');	
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Form qui se fige lors d'un traitement malgré thread
    Par SesechXP dans le forum Windows Forms
    Réponses: 7
    Dernier message: 31/05/2007, 11h46
  2. Comment afficher une form qui a été réduite?
    Par Mickey.jet dans le forum Delphi
    Réponses: 6
    Dernier message: 12/08/2006, 09h39
  3. Réponses: 12
    Dernier message: 21/02/2006, 11h47
  4. Une Form qui retourne une valeur?
    Par say dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/02/2006, 10h05
  5. [VS 2003][dessin] synchronizer un thread avec une forme
    Par Harry_polin dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/10/2005, 10h31

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