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

Composants VCL Delphi Discussion :

forme d'appel autorisé seulement par les méthodes de classe


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut forme d'appel autorisé seulement par les méthodes de classe
    Salut, j'essaie d'appeler une procédure d'un thread à partir d'une procédure normale, mais ça m'affiche l'erreur: forme d'appel autorisé seulement par les méthodes de classe , voici mon code:
    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
     
    //entête ici (uses .. etc)
    procedure stopThread;
     
    type
    ThreadType=class(TThread)
    // les différents champs et procédure
    procedure stop;
    end;
     
    // l'implémentation des différentes procédures
    procedure stopThread;
    begin
    ThreadType.stop;
    end;
     
    end.
    Dans ce cas comment procécer pour résoudre ce problème, tant que je ne peux pas appeler la procédure de thread à partir d'une procédure normale et merci.

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    pour stopper un Thread il faut appeler une méthode de l'instance du thread et non une méthode de classe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var
      MonThread: ThreadType;
    begin
      MonThread := ThreadType.Create(False);
      MonThread.Stop; // là ok
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut
    y'a pas d'erreur de compilation maintenant mais quand je clique sur le bouton stop le thread n'est pas arrêté , bon j'ai deux unités,unit 1: contenant la déclaration du TypeThread y compris sa procédure stop + create+ déclaration de la variable monThread :TypeThread.
    L'autre unité :unit2 (uses unit1) contenant l'appel du constructeur du thread et l'appel de la procédure stop, comme ce qui suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm2.ButtonStartClick(Sender: TObject);
    begin   
    monThread:=TypeThread.Create('paramètres envoyés');
    end;
     
    procedure TForm2.ButtonPauseClick(Sender: TObject);
    begin
    monThread.stop;
    end;
    monthread est bien créé et exécuté, mais quand je clique sur ButtonPauseClick rien ne se passe, pourquoi?

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    vu que je ne sais ce que fait le thread quand il démarre, ce que fait la méthode stop et ce qu'il est supposé se produire quand elle est appelée, je ne peux répondre.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2013
    Messages : 80
    Points : 49
    Points
    49
    Par défaut
    Ce que fait le thread quand il démarre:
    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
     
    procedure  TPrincipalThread.Execute;
    var HTTP:TIDHttp;
        SSL: TIdSSLIOHandlerSocketOpenSSL;
      begin
      SSL:= TIdSSLIOHandlerSocketOpenSSL.Create(nil);
      HTTP:= TIDHttp.Create(nil);
      SSL.OnVerifyPeer:=IdIOHandlerVerifyPeer;
      HTTP.IOHandler:=SSL;
      HTTP.Request.BasicAuthentication := True;
      HTTP.Request.Username := 'moi';
      HTTP.Request.Password := 'pass';
      //Récupère la taille du fichier et la capacité du serveur
      //en ne téléchargeant que l'entête
      HTTP.Head('https:\\192.168.1.100\deb.iso');
      FileSize     := HTTP.Response.ContentLength;
      //Contrôle le nombre de Threads à utiliser :
      if ThreadCount > 1 then
      begin
        if  (FileSize > AllocSize)
        then ThreadCount := Min(ThreadCount, FileSize div AllocSize)
        else ThreadCount := 1;
      end;
      //Téléchargement
      if ThreadCount > 1
      then multithread
      else monoThread;
    end;
    Ce que fait la méthode STOP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure  TPrincipalThread.Stop;
      begin
      Terminate;
      SetEvent(RunEvent);
      end;
    Bref, c'est un programme de téléchargement multithread quand le thread principal est exécuté,il doit appeler multithread (si ThreadCount>1) dans laquelle il va démarrer les threads de téléchargement, sinon il doit procéder au téléchargement monoThread simple, ce qui est sur c'est que le problème ne dépend pas de multithread ( stop ne fait pas son rôle même avec monoThread)si vous avez besoin d'autres informations dites-le , merci de me répondre.

  6. #6
    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
    Dans mon tuto, il n'est pas possible d'interrompre le téléchargement monothread. Pour cela, il faudrait gérer l'événement OnWork du IdHttp et conditionner un Abort.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Terminated then Abort;
    En multithread, appeler Terminate est suffisant. Les threads secondaires termineront le boulot en cours mais ne seront pas redémarrés. Pour un arrêt immédiat, même chose que ci-dessus (Il faudra gérer Error pour une sauvegarde correct de l'avancement).

    Ce SetEvent(RunEvent) n'a rien à faire là

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/03/2015, 11h43
  2. Réponses: 2
    Dernier message: 11/02/2014, 16h46
  3. Réponses: 2
    Dernier message: 25/06/2012, 14h37
  4. detection de contour par les méthodes des Contours actifs
    Par aichaeside dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 19/10/2009, 14h12
  5. Réponses: 3
    Dernier message: 02/01/2007, 13h53

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