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

Web & réseau Delphi Discussion :

Annuler un processus IdHTTP


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut Annuler un processus IdHTTP
    Bonjour à tous.
    J'utilise Delphi 6 et j'ai deux problèmes à vous soumettre :

    Mon logiciel doit pouvoir télécharger des fichiers; l'adresse URL source et le répertoire de sauvegarde cible sont contenus dans une base de données Access 2000.
    J'ai une boucle qui lance le téléchargement de chaque fichier l'un après l'autre et tout fonctionne.

    MAIS (car il y a toujours un mais...)

    1. J'ai un bouton pour mettre en pause qui est fonctionnel; un pour annuler toute l'opération qui fonctionne aussi; mais je cherche à pouvoir aussi annuler uniquement l'item courant de la boucle...
    2. J'ignore complètement comment gérer les cas d'erreurs et je ne trouve pas de Doc URL introuvable, serveur occupé, délai trop long, etc...

    Voici le code (moins tout l'affichage et les multiples conditionnels) :

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    procedure TmInst.LaunchInstallation(Sender: TObject);
    var     x, y, k2: Integer;
    begin
              DataM.AppCmd.First;
              for y:= 0 to DataM.AppCmd.RecordCount- 1 do begin
                ItemCmd:= '';
                ItemParam:= '';
                RunDownloadCommand(Sender);
                Sleep(100);
                DataM.AppCmd.Next;
              end;
    end;            
     
    procedure TmInst.Button1Click(Sender: TObject);
    begin
            ShowMessage('Job Paused !  Press OK to continue.');
    end;
     
    procedure TmInst.Button2Click(Sender: TObject);
    begin
            ShowMessage('Job Cancelled !  Press OK to continue.');
            Application.Terminate;
            // HOW TO ONLY CANCEL CURRENT ITEM Y AND NOT ALL...
    end;
     
    procedure TmInst.RunDownloadCommand(Sender: TObject);
    var     cc1, cc2: string;
            TmpFileStream: TFileStream;
    begin   
            ItemCmd:= DataM.AppCmd.FieldByName('cCmd').AsString;
            cc2:= DataM.AppCmd.FieldByName('cSwitch').AsString;
            ItemParam:= DataM.ConvertBackRelativePath(cc2);       
            try
              try
                TmpFileStream:= TFileStream.Create(ItemParam, fmCreate);
                IdHTTP.Get(ItemCmd, TmpFileStream);
              except
                // if IdHTTP.ClosedGracefully= True then Exit; ??
                // need handling for Socket Error(s) AS #10060 'Cnx timed out'
              end;
            finally
              FreeAndNil(TmpFileStream);
            end;
    end;        
     
    procedure TmInst.IdHTTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCountMax: Integer);
    begin
            if AWorkMode= wmRead then begin
              ProgressBar2.Max:= AWorkCountMax;
              ProgressBar2.Position:= 0;
              FStartDate:= Now;
            end;
    end;
     
    procedure TmInst.IdHTTPWork(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    var     ElapsedTime: Cardinal;
    begin
            if AWorkMode= wmRead then begin
              ProgressBar2.Position:= AWorkCount;
              Label9.Caption:= Format(RS_Debit, [AWorkCount, ProgressBar2.Max]);
              ElapsedTime:= SecondsBetween(Now, FStartDate);
              if ElapsedTime> 0 then Label14.Caption:= Format('%s',
                [FormatFloat('0.00', (AWorkCount/1024)/ElapsedTime)]) + ' KB/sec';
              Application.ProcessMessages;
            //Sleep(10);  //-->  activate to slow down download...
            end;
    end;
     
    procedure TmInst.IdHTTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
    begin
            if AWorkMode= wmRead then begin
              Label9.Caption:= RS_Fin;
              ProgressBar2.Position:= 0;
            end;
    end;
    Si vous pouvez m'orienter dans la bonne direction, je serais déjà très heureux :-)
    Si vous avez des exemples, je suis preneur aussi
    Merci.

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut
    Hum. Je me tape sur les doigts...
    Comment ça se fait que j'ai pas trouvé ça ?
    Merci Rayek.

    Ceci va me permettre de résoudre mon problème numéro 1.
    Des idées pour le numéro 2 ?

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Citation Envoyé par Merlinbad Voir le message
    Hum. Je me tape sur les doigts...
    Comment ça se fait que j'ai pas trouvé ça ?
    Merci Rayek.

    Ceci va me permettre de résoudre mon problème numéro 1.
    Des idées pour le numéro 2 ?
    Regarde dans ma signature EasyIndy 1.3, j'ai mis un exemple d'utilisation avec IdHttp et une gestion des erreurs, tu peux t'en inspirer
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut
    Merci encore.
    Je vais regarder ton code cet après-midi.
    Je t'en donnes des nouvelles.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut
    J'ai dû mettre mon Indy à jour (de version 9 à 10) pour pouvoir utliser les méthodes que tu m'as suggérées...
    Ça m'a fait plein de bout de codes à corriger et/ou modifier... :/

    Mais bon, ça semble fonctionner
    Va falloir faire plein de tests, mais je crois être sur le bon chemin.
    Merci à toi encore.

    Si tu est curieux, mon freeware est disponible ici (bien qu'il ne soit pas encore publié nulle part; seuls quelques testeurs sont au courant):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.quinnlab.com/
    Je suis ouvert à tous les commentaires.
    ++

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Citation Envoyé par Merlinbad Voir le message
    J'ai dû mettre mon Indy à jour (de version 9 à 10) pour pouvoir utliser les méthodes que tu m'as suggérées...
    Ça m'a fait plein de bout de codes à corriger et/ou modifier... :/

    Mais bon, ça semble fonctionner
    Va falloir faire plein de tests, mais je crois être sur le bon chemin.
    Merci à toi encore.

    Si tu est curieux, mon freeware est disponible ici (bien qu'il ne soit pas encore publié nulle part; seuls quelques testeurs sont au courant):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.quinnlab.com/
    Je suis ouvert à tous les commentaires.
    ++
    tu n'etais pas obligé de mettre à jour mais il aurait fallut que tu fasses quelques modifications sur le code (n'ayant pas une version avec indy9 je ne pouvais pas vraiment le faire)

    Sinon ton logiciel semble faire la même chose que la LiberKey

    http://www.liberkey.com/
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

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

Discussions similaires

  1. Processus paralleles
    Par Lyes dans le forum Threads & Processus
    Réponses: 4
    Dernier message: 11/02/2003, 13h04
  2. 1 variable pour 2 processus
    Par kacedda dans le forum POSIX
    Réponses: 2
    Dernier message: 11/02/2003, 06h32
  3. probleme avec les processus
    Par saidi dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/02/2003, 00h18
  4. [VB6] [Système] Tuer un processus courant
    Par mdoyer dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 22/10/2002, 14h47
  5. Réponses: 2
    Dernier message: 04/10/2002, 09h13

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