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

GTK+ avec C & C++ Discussion :

probleme de conception


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut probleme de conception
    Hello !!

    J'ai une petite question de conception !!

    J'ai une fonction appelant un call-back. Ce call-back ne peut pas prendre d'arguement mais j'aimerai néanmoin qu'elle utilise des données présente dans une variable particulere.

    Je déclare donc ma variable en gobale...

    ex :

    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
     
    //Declaration globale de ma variable
    int MaVariable = 0;
     
    retourPrédéfinis MonCallBack(types prédéfinis que je peux pas changer)
    {
         maVariable++;
    }
     
    MaFonction()
    {
        ...
        //envenement attendu, appel du call-back
        appelCallBack(MonCallBack);
     
        //Fin de la fonction car plus d'évenement a traiter
     
    }
    Grace a ce code, la variable MaVariable à été incrémentée a chaque appel du call-back...

    Dans mon programme, ceci fonctionne tres bien car je prend soin de proteger ma variable globale pdt son utilisation par le call-back... Mais j'imagine qu'il y a une meilleure solution à apporter à ce pb !!

    Quelqu'un à t-il une idée ??

    Merci d'avance !!

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par gdpasmini
    J'ai une petite question de conception !!

    J'ai une fonction appelant un call-back. Ce call-back ne peut pas prendre d'arguement
    arguments...

    Tu est sûr ? Peux-tu montrer le prototype du callback (les fameux "types prédéfinis que je peux pas changer") . Qui a écrit ce callback que je lui botte les fesses...
    mais j'aimerai néanmoin qu'elle utilise des données présente dans une variable particulere.
    C'est légitime...
    Je déclare donc ma variable en gobale...
    Ben oui. Code mal conçu -> réalisation crade. Pas le choix... Je recharge mon lance-flammes.
    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
     
    //Declaration globale de ma variable
    int MaVariable = 0;
     
    retourPrédéfinis MonCallBack(types prédéfinis que je peux pas changer)
    {
         maVariable++;
    }
     
    MaFonction()
    {
        ...
        //envenement attendu, appel du call-back
        appelCallBack(MonCallBack);
     
        //Fin de la fonction car plus d'évenement a traiter
     
    }
    Grace a ce code, la variable MaVariable à été incrémentée a chaque appel du call-back...

    Dans mon programme, ceci fonctionne tres bien car je prend soin de proteger ma variable globale pdt son utilisation par le call-back... Mais j'imagine qu'il y a une meilleure solution à apporter à ce pb !!

    Quelqu'un à t-il une idée ??
    Passe moi l'adresse de celui qui a écrit la fonction, je vais lui repeindre son appart gratos...



    Y'a vraiment des trucs qui m'énervent...

  3. #3
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    tu peux aussi prévoir un argument suplémentaire pour les fonctions callback (tout dépend si c'est toi qui définie le prototype), comme le fait GTK+ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void (*GCallback) (GtkWidget *p_widget, gpointer user_date);
    Sinon passer par un fichier (c'est un solution )

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par gege2061
    tu peux aussi prévoir un argument suplémentaire pour les fonctions callback
    Hum, le Monsieur, il a dit
    retourPrédéfinis MonCallBack(types prédéfinis que je peux pas changer)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut
    déjà, merci pour vos réponses !! Et Emmanuel, j'éviterai à l'avenir de te montrer du code trop crade, j'aime bien mon appart !

    Je vais donc essayer de pas dire de bétises...

    J'ai deux exemple :
    le premier est un callback qui se trouve dans le header pcap.h. Il fait partie d'une librairie permettant de traiter les paquets réseaux contenu dans des fichiers produit par le logiciel ethereal.

    Voila sa définition :

    int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user);

    A priori, il est possible de lui donner un u_char.. mais moi j'ai besoin de lui faire passer une structure de mon cru...


    D'autre part, ce probleme se pose avec l'api windows en win32. Comment peut on sauvegarder une valeur entre deux click sur un bouton sans passer par une variable globale...?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut
    En plus reflexion faite, le u_char.. j'en ai déja besoin pour un nom de fichier... ah ah ah. Je suis donc vraiment bloqué à ce niveau la !!

    Tu peux envoyer le lance-flamme !!

  7. #7
    Membre chevronné
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    Mets le nom de ton fichier dans une structure avec tout le reste et tu passe son adresse!

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Par défaut
    oki je vais essayer tout ca... merci du coup de main. Je vous tiens des résultats !

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par gdpasmini
    J'ai deux exemple :
    le premier est un callback qui se trouve dans le header pcap.h. Il fait partie d'une librairie permettant de traiter les paquets réseaux contenu dans des fichiers produit par le logiciel ethereal.

    Voila sa définition :

    int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user);
    Et à ton avis, u_char *user, c'est de la déco ?
    A priori, il est possible de lui donner un u_char.. mais moi j'ai besoin de lui faire passer une structure de mon cru...
    Conception à la gomme de pcap. J'aurais mis un void *, évidemment. Même dans la bibliothèque standard du C, ils font comme ça (qsort()). Y'en a vraiment qui se croient plus malins que les autres... Encore un truc qui m'énerve...

    Tu es bon pour un cast (u_char *) à l'appel et un autre à la récupération (mon_type *)
    D'autre part, ce probleme se pose avec l'api windows en win32. Comment peut on sauvegarder une valeur entre deux click sur un bouton sans passer par une variable globale...?
    Forum "Développement Windows". C'est fait pour...

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

Discussions similaires

  1. problème de conception : cycle
    Par FarookFreeman dans le forum Diagrammes de Classes
    Réponses: 13
    Dernier message: 20/10/2005, 10h15
  2. Probleme de conception pour un update Oracle!
    Par vempiria dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/09/2005, 10h28
  3. [Language]Problème de conception
    Par lautre dans le forum Langage
    Réponses: 5
    Dernier message: 26/09/2005, 07h56
  4. [Evenement]Probleme de conception
    Par le Daoud dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 26/05/2005, 14h12
  5. probleme de conception de classe
    Par NhyMbuS dans le forum C++
    Réponses: 2
    Dernier message: 08/05/2005, 17h10

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