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] Suspend : arrêt immédiat ?


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Par défaut [Thread] Suspend : arrêt immédiat ?
    Re Re Bonsoir à tous,

    Après j'arrête c'est promis ... (enfin pour ce soir au moins ) ... mais bon normal que je me pose des questions, c'est la première fois que je fais du multi-thread sous windows en Delphi ...

    Je me suis pausé une question :
    lorsque l'on appel la méthode Suspend d'une classe dérivé de TThread depuis le thread principal ... le thread visé est-il suspendu immédiatement ? ... Donc en gros s'il est dans une section critique et qu'il est suspendu on risque d'avoir un problème ?

    Donc si ce que je dis est vrai ... le mieux est certainement de créer une méthode internet à notre classe qui déterminera s'il peut se suspendre ou non ... Non ?


    Merci de votre réponse

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par Bleys Voir le message
    Re Re Bonsoir à tous,

    Après j'arrête c'est promis ... (enfin pour ce soir au moins ) ... mais bon normal que je me pose des questions, c'est la première fois que je fais du multi-thread sous windows en Delphi ...

    Je me suis pausé une question :
    lorsque l'on appel la méthode Suspend d'une classe dérivé de TThread depuis le thread principal ... le thread visé est-il suspendu immédiatement ? ... Donc en gros s'il est dans une section critique et qu'il est suspendu on risque d'avoir un problème ?

    Donc si ce que je dis est vrai ... le mieux est certainement de créer une méthode internet à notre classe qui déterminera s'il peut se suspendre ou non ... Non ?


    Merci de votre réponse
    S'il utilise une section critique, il vaut mieux acquérir cette section avant de le suspendre
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre éclairé
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Par défaut
    C'est vrai, c'est une autre façon de faire, certainement plus propre ...



    Merci de ta réponse

  4. #4
    Membre éclairé
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Par défaut
    Je me permet de relancer le sujet en modifiant quelque peu ce que j'ai dit :

    Supposons que je veux que l'utilisateur ne puisse suspendre le thread qu'une fois sa boucle en cours d'exécution est terminée comment faire ?

    J'ai évidemment pensé à utiliser une variable interne à mon thread du style arretDemande et d'implémenter mon Execute comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    while not(Terminated) do
    begin
       while not(arretDemande) do
       begin
          // mon traitement
       end;
    // Point numéro 1
    end;
    Je me dis alors qu'il suffit de surcharger la méthode Suspend de mon thread pour que son rôle se limite à modifier la valeur de arrêt demandé. Si je ne fais pas appel à inherited dans le corps de cette méthode mon thread ne devrait pas se suspendre vrai ? Ca donnerait donc quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TMonThread.Suspend;
    begin
         arretDemande := true;
    end;
    Cela étant dit je voudrais tout de même que mon thread se suspende réellement (inutile qu'il tourne pour rien). D'où mon commentaire où j'ai écrit Point numéro 1 : je pense ici ajouter l'appel à la méthode Suspend.

    Et c'est là que j'ai un problème. Si je fais ça comme ça, il va appeler ma méthode surcharger => il ne devrait pas se suspendre tout seul ...

    Comment résoudre se problème pour qu'il se suspende réellement ?



    Par avance merci

  5. #5
    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 Aide Delphi
    Interrompt l'exécution du thread.

    Classe
    TThread

    Syntaxe


    [Delphi] public procedure Suspend();


    Description
    Appelez Suspend pour interrompre temporairement l'exécution du thread. Pour reprendre l'exécution après un appel à Suspend, appelez Resume. Il est possible d'imbriquer les appels de la méthode Suspend ; Resume doit alors être appelée le même nombre de fois que Suspend avant que l'exécution du thread reprenne.
    Modérateur Delphi

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

  6. #6
    Membre éclairé
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Par défaut
    J'ai bien lu et relu l'aide de Delphi ... Seulement ça ne répond pas à ma question, ou alors je ne l'interprète pas comme il faut ...

Discussions similaires

  1. Service Windows - Arrêt immédiat !
    Par drjacky dans le forum VB.NET
    Réponses: 2
    Dernier message: 27/05/2008, 15h17
  2. Thread suspend impossible ?
    Par poulette3000 dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 07/06/2007, 21h21
  3. Threads et arrêt d'une méthode
    Par oc_alex86 dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 25/05/2007, 19h12
  4. [Threads] suspend and resume
    Par el3gans dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 19/09/2005, 20h56
  5. Arrêt immédiat d'un prog.
    Par Teufel dans le forum C++Builder
    Réponses: 7
    Dernier message: 21/06/2005, 08h58

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