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

WinDev Discussion :

Instancier plusieurs objets dans une boucle


Sujet :

WinDev

  1. #21
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    oui tout à fait, j'ai bien l'impression que c''est lui qui me fait ramer le thread...

    Mais je vois pas comment faire autrement...

  2. #22
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    Je fais completement fausse route.

    Ce n'est pas la fonction socketEcrit() avec le tableau type "queue liste" qui pose problème.

    Mais la timeout définit dans la fonction socketLit().
    J'ai bien l'impression que celle-ci bloque la socket tant qu'elle ne reçoit rien !!
    Je me suis permis d'ouvrir un nouveau post à ce sujet...

  3. #23
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    je reprends le sujet de base, l'instanciation d'objet dans la boucle :

    j'utilise ceci dans le code d'init du projet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    gtabMaListeObj est un tableau de MaClasse
     
    POUR TOUT MonFic 
    	gpclMonObj est MaClasse (MonFic.Rub1, MonFic.Rub2)
    	TableauAjoute(gtabMaListeObj,gpclMonObj)	
    FIN
     
    libérer gpclMonObj
    est ce la bonne méthode ?

    Si je met un trace dans la méthode constructeur, j'ai l'impression qu'il m'instancie exactement le double du nombre d'obet qu'il devrait.

    Et j'ai cet avertissement quand je quitte lappliaction :

    Des instances de la classe 'MaClasse' n'ont pas été libérées (1).
    Ceci peut être dû à des références circulaires entre les instances.
    Il est possible de briser le cycle grâce à une référence faible ou de forcer la libération d'une instance grâce à l'instruction 'libérer'.
    J'ai l'impression de louper qqch, mais je sais pas quoi ??

    Si vous avez une idée ?

  4. #24
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 807
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 807
    Points : 5 263
    Points
    5 263
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Un FichierVersTableau devrait régler le problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    gtabListeFic est tableau de MClasseFic //La classe doit être mappée ou respecter les normes précisée dans la doc
     
    FichierVersTableau(gtabListeFic,MonFic)
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  5. #25
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    je vais essayer ça, merci.

    en attendant, je pense avoir résolu le problème d'instanciation en ajoutant "dynamique" dans la déclaration du tableau.
    ça reste flou pour moi...

    Mais ça ne m'enlève pas le warning lorsque je quitte l'application...

  6. #26
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 807
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 807
    Points : 5 263
    Points
    5 263
    Billets dans le blog
    1
    Par défaut
    As tu libéré ton tableau ?
    Normalement, la libération d'une classe se fait automatiquement lorsqu'on via le destructeur, mais comme tu as des instances qui sont toujours utilisées, le destructeur n'est pas appelé.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  7. #27
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    j'ai essayé :

    tableausupprimetout()
    parcourir chaque objet dans une boucle et faire un libérer objet
    libérer ce tableau (là j'ai une erreur)
    j'ai bien fait attention, à stopper proprement les thread (certaines méthodes des objets) (et je confirme leur bon arrêt)

    mais rien de tout ça ne fonctionne.

    ce qui est étrange , c'est que si je ne démarre pas les thread, j'ai pas cette erreur lors de la fermeture de l'application.
    Je l'ai que si un thread a été démarrer.
    Mais avant de quitter, j'ai bien la preuve que le(s) thread sont bien arrêtés. ça c'est sûr...

    ???

  8. #28
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 807
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 807
    Points : 5 263
    Points
    5 263
    Billets dans le blog
    1
    Par défaut
    A mon avis tu dois être dans l'un des cas de figure décrit ici
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  9. #29
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    hmmm, j'ai bien lu, je ne pense pas être dans ce cas là...

    alors je confirme que les thead n'y sont pour rien.

    L'utilisation de FichierVersTableau() ne résoud pas ce problème.

    En fait j'ai l'impression que c'est dès que j'utilise les objects que ça bloque à la fermeture.

    c'est dingue parce que je bien la procédure constructeur se dérouler (pour mes 3 objets) et également la procédure destructeur !!!

    Je n'arrive pas à comprendre d'où viens ce message !

  10. #30
    Membre habitué Avatar de mous97
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 119
    Points : 175
    Points
    175
    Par défaut
    "
    Des instances de la classe 'MaClasse' n'ont pas été libérées (1).
    Ceci peut être dû à des références circulaires entre les instances.
    Il est possible de briser le cycle grâce à une référence faible ou de forcer la libération d'une instance grâce à l'instruction 'libérer'.
    "

    En général quand tu as ce genre d'avertissement c'est du a des références d'objets sur tes membres de classes, montre moi la structure de tes classes et je te résous ce soucis

  11. #31
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    Quand tu parles de la structure, c'est quand même pas tout avec les méthodes complètes si ?

  12. #32
    Membre habitué Avatar de mous97
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 119
    Points : 175
    Points
    175
    Par défaut
    Citation Envoyé par jjacques68 Voir le message
    Quand tu parles de la structure, c'est quand même pas tout avec les méthodes complètes si ?
    Non juste les membres bien sur

  13. #33
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 807
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 807
    Points : 5 263
    Points
    5 263
    Billets dans le blog
    1
    Par défaut
    Ton schéma UML suffira je pense
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  14. #34
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    bon et bien voilà :

    Nom : Sans titre.png
Affichages : 246
Taille : 19,4 Ko

    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
    ClassePLC est une Classe	
    	m_sLibelle					est une chaîne	= ""
    	m_sAdresseIP				est une chaîne	= ""
    	m_sMonCanal				est une chaîne	= ""
    	m_bMonStatus				est un boolean	= Faux
    	m_nIHM_Couleur			est un entier	= 0
    	m_tabListeDataToSend		est un tableau de chaînes 
    FIN
     
    PROCÉDURE Constructeur(sMonIP est une chaîne="", sMonLibelle est une chaîne ="")
     
    :m_sLibelle           = sMonLibelle
    :m_sAdresseIP      = sMonIP
    :m_nIHM_Couleur = RVB(255, 0, 0)
     
    //Trace("constructeur", sMonLibelle)
     
     
    PROCÉDURE Destructeur()
     
    //trace("destructeur", :m_sLibelle)
    désolé pour l'indentation merdique lié au copié/collé

  15. #35
    Membre habitué Avatar de mous97
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 119
    Points : 175
    Points
    175
    Par défaut
    J'ai juste besoin des déclarations de tes classe pas les méthodes, c'est la seule classe que tu utilises ? Montre le code ou tu déclares et utilises ton tableau

  16. #36
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    oui c'est la seule classe.

    Voici le code qui instancie les objets (placé dans le code d'init du projet)

    (PLC est le fichier .FIC qui contient les données...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    gtabMaListeObj est un tableau de ClassePLC dynamique
     
    POUR TOUT PLC
    	gpclMonObj est ClassePLC (PLC.AdresseIP, PLC.Libelle)
    	TableauAjoute(gtabMaListeObj,gpclMonObj)	
    FIN
    Dans le code de fermeture de la fenêtre principale je libère les objet avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //libère les objets
    POUR i = 1 À gtabMaListeObj..Occurrence libérer gtabMaListeObj[i]
    TableauSupprimeTout(gtabMaListeObj)

  17. #37
    Membre habitué Avatar de mous97
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 119
    Points : 175
    Points
    175
    Par défaut
    Ne déclare pas ton tableau en dynamique

  18. #38
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    Désolé, mais déjà essayé, ça ne me règle pas le problème.

    En plus, sans "dynamique", c'est ce que je disais plus haut, j'ai l'impression qu'il m'instancie le double d'objets qu'il devrait.
    Je me rends compte quand j'active ma trace dans le constructeur.
    J'ai pour chaque objet 2 traces...

    Bon ça n'empêche toujours pas le bon fonctionnement du programme.
    Mais toujours ce bug à la fermeture.
    ça m'énerveeeeeee !

  19. #39
    Membre actif

    Homme Profil pro
    Sans
    Inscrit en
    Mars 2018
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mars 2018
    Messages : 153
    Points : 295
    Points
    295
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mous97 Voir le message
    Ne déclare pas ton tableau en dynamique
    Citation Envoyé par jjacques68 Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gtabMaListeObj est un tableau de ClassePLC dynamique
    ...
    Ici, ce n'est pas le tableau qui est dynamique mais les objets de type ClassePLC qu'il devrait contenir.

    Cependant, cette déclaration ne correspond pas au code inclus dans ta boucle. Le code suivant ne génère pas des objets dynamique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	gpclMonObj est ClassePLC (PLC.AdresseIP, PLC.Libelle)
    Tu devrais plutôt l'écrire de cette manière et voir comment se comporte la libération des objets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	gpclMonObj est ClassePLC dynamic <- new ClassePLC(PLC.AdresseIP, PLC.Libelle)
    hth,
    Padbrain

  20. #40
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    Je viens d'essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    gtabMaListeObj est un tableau de ClassePLC dynamique
     
    POUR TOUT PLC
    	gpclMonObj est ClassePLC dynamique <- new ClassePLC(PLC.AdresseIP, PLC.Libelle)
    	TableauAjoute(gtabMaListeObj,gpclMonObj)	
    FIN
    malheureusement, ça ne change rien...
    J'ai également essayé avec ou sans les "dynamique".

    Par contre petite remarque, je sais pas si ça a de l'importance ou pas, mais j'ai une Zone répétée dans l'IHM, qui a comme source ce tableau d'objets...
    avec attributs et champs en liaisons sur des membres de l'objet...

Discussions similaires

  1. Instanciation d'objets dans une boucle
    Par Mister Nono dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/12/2017, 15h46
  2. Instancier plusieurs objets avec une boucle for
    Par bromy dans le forum Android
    Réponses: 4
    Dernier message: 28/03/2017, 22h13
  3. plusieurs objets dans une fenêtre
    Par KalKul dans le forum OpenGL
    Réponses: 5
    Dernier message: 23/03/2008, 14h27
  4. declarer plusieurs JcheckBox dans une boucle
    Par 01211983 dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 21/02/2008, 01h47
  5. [FLASH MX] Créer un objet dans une boucle
    Par alexfrere dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 30/04/2006, 01h35

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