Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1858 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [Delphi] Pourquoi ce thread ne fonctionne pas ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Delphi] Pourquoi ce thread ne fonctionne pas ?

n°1011398
davidmarli
Posté le 13-03-2005 à 18:40:22  profilanswer
 

Bonjour à tous,
 
bon j'ai installé les indy version 10 pour delphi 7.
 
Voici mon Thread :  
 

Citation :

unit ThreadDownload;
 
interface
 
uses
  Classes,unittelechargement,IdException,Windows,dialogs;
 
type
  Tdownload = class(TThread)
  private
   FTel:Tform2;
    { Déclarations privées }
   Procedure OnTerminateprocedure(sender:tobject);
  protected
    procedure Execute; override;
    public
    constructor create(suspended:boolean);
  end;
 
implementation
 
constructor Tdownload.create(suspended:boolean);
begin
 Freeonterminate:=true;
 inherited create(suspended);
 Ftel:=Tform2.Create(nil);
 Ftel.Labelnomdefichier.Caption:=nomfic;
 Ftel.labelurl.caption:=url;
 Ftel.Show;
 OnTerminate:=OnTerminateProcedure;
end;
 
Procedure Tdownload.OnTerminateprocedure;
begin
 if Assigned(Ftel) then Ftel.release;
end;
{ Important : les méthodes et propriétés des objets de la VCL peuvent uniquement
  être utilisés dans une méthode appelée en utilisant Synchronize, comme :
 
      Synchronize(UpdateCaption);
 
  où UpdateCaption serait de la forme  
 
    procedure Tdownload.UpdateCaption;
    begin
      Form1.Caption := 'Mis à jour dans un thread';
    end; }
 
{ Tdownload }
 
procedure Tdownload.Execute;
var Fs : TFileStream;
begin
if assigned(ftel) then
begin
  Fs := TFileStream.Create(ftel.Labelnomdefichier.caption,fmCreate); //Nom du fichier local
  with Ftel.IdHTTP1 do
  try
     try
        //URL du fichier à télécharger
        Get(Ftel.LabelURL.caption,Fs);
     except
         On E : EIdException do
         { MessageDlg(Format('Erreur Indy : %s',[E.message]), mtError, [mbOK], 0) }
         begin
          //deletefile(ftele.Labelnomdefichier.caption);
          end;
         {On E : Exception do
           ShowMessage(Format('Erreur inconnue : %s',[E.Message]));
    }end;
  finally
   Fs.Free; //Liberer le flux
 
 
  end;
  { Placez le code du thread ici }
end;
end;
 
end.


 
Mais il y a un pb qd j'appelle le thread.
Ce dernir bloque dans la procedure Tdownload.create à la ligne  
Ftel:=Tformtelechargement.create(nil);
 
Le programme reste bloqué indéfiniment sans dire quoi que ce soit (comme si une boucle infini était lancée !!!)
 
Quelqu'un a une idée ?


---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
mood
Publicité
Posté le 13-03-2005 à 18:40:22  profilanswer
 

n°1011550
antp
Super Administrateur
Champion des excuses bidons
Posté le 13-03-2005 à 21:27:48  profilanswer
 

Tu peux pas directement accéder à la VCL dans un thread.  
Ta création de form et tout là, ça va pas.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1011589
davidmarli
Posté le 13-03-2005 à 22:30:55  profilanswer
 

ben en fait j'ai desinstallé indy 10 et mis indy 9
La même routine marche nickel !


---------------
Matheux Fou - https://afficheur-tempo.fr - TEMPO BOX pour abonnés TEMPO EDF
n°1011596
antp
Super Administrateur
Champion des excuses bidons
Posté le 13-03-2005 à 22:40:44  profilanswer
 

C'est un coup de bol, sur d'autres machines ou à d'autres moments ça peut foirer.
L'utilisation de la VCL dans un thread est très aléatoire.
J'en ai déjà fait l'expérience ;)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1250621
Police nat​ional
Posté le 22-11-2005 à 12:00:10  profilanswer
 

Hello davidmarli,
 
Si j'etais toi, je passerai tous les paramètres(variable) au creat du thread, du style :
 
MonThread := Tdownload.creat(True, EditMonFicher.text, EditUrl.text) ;
MonThread.Resume;
 
Comme ça tu peux viré le Form du Creat.
 
Cela dit moi aussi j’ai des problèmes avec INDY 10 et TTCPClient(ou un truc du genre) dans un Thread. J’ai le message d’erreur «violation d’accès a la mémoire ». Je n’ai aucun problème avec mon script sans thread….
 
Si quelqu’un pouvait m’aider ça serai sympa !!!

n°1251192
antp
Super Administrateur
Champion des excuses bidons
Posté le 23-11-2005 à 00:27:56  profilanswer
 

Vu les détails que tu donnes je vois pas trop comment quelqu'un pourrait t'aider :p


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°1251452
Police nat​ional
Posté le 23-11-2005 à 13:32:04  profilanswer
 

Nan enfaite j'avais juste stoné la création de l'objet TCPclient1 := TTCPclient.creat(nil);
 
... Fo que j'arrete de fumer !!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [Delphi] Pourquoi ce thread ne fonctionne pas ?

 

Sujets relatifs
[Delphi] idhttp : erreur ...mon programme fonctionne t il chez vous?
Passage paramètre à une thread[Delphi] à propos des threads ...
[Delphi] faire une pause dans un prog ?[delphi] afficher le code source d'une page html ?
Ancre #test en .shtml ne fonctionne pas[linux 2.4 usb] isochrone implique-t-il thread ?
[Delphi] telechargement via idhttp ?Help Delphi - Concertisseur
Plus de sujets relatifs à : [Delphi] Pourquoi ce thread ne fonctionne pas ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR