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

C++ Discussion :

[question bete] qu'est-ce qu'un handle?


Sujet :

C++

  1. #1
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut [question bete] qu'est-ce qu'un handle?
    voila, j'ai lut la FAQ, et la seule occurence que je trouve est :

    Qu'est-ce qu'un handle sur un objet ? une référence ? un pointeur ? un pointeur sur un pointeur ?
    http://c.developpez.com/faq/cpp/?pag...FERENCE_handle

    alors voila, moi a chaque fois que je lisait handle, je me disait "fonction qui s'execute en parallele"

    est-ce parcequ'elle s'execute apartir d'un pointeur?

    et je rajouterait : comment créer un handle?

    dsl, si c'est vraiment une question con...

  2. #2
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Je dirais plutot qu'un handle est une sorte d'indice qui permet de référencer une structure.

    Par exemple j'ai un tableau qui contient une liste de structures. Chaques structures créer aura un id attribué. On vas appeler cet id un handle (poignée). Par contre tu n'aura jamais acces à ce tableau, seule les fonctions gérant cette structures y auront accès. Ainsi si on considère que cachune de ces fonction est une porte, tu doit lui donner ton handle pour l'ouvrir... Je sait c'est assez imager mais bon...

    Par contre l'intéret d'un handle en C++ me parais vachement limité... C'est plutot un truc C.

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    bonjour,

    Un handle est une poignée. Une sorte de référence sur un objet a partir duquel tu pourras manipuler cet objet ( appel de fonction).

    On ne crée pas vraiment de handle en général se sont des fonctions qui en renvoient un. ( voir les fonctions de l'API windows)

  4. #4
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    soit j'ai vraiment trop delacunes, soit j'ai mal posé ma question :

    d'apres la faq que j'ai lut, je coprend la notion de poignée (certes, encore mieux grave a vos explications pertinentes, mici beaucoup )

    mais je n'arrive pas a faire le parallele avec les fonctions, en effet, j'ai toujours cru qu'un handle (croyance fausse, je m'en susi rendu compte) etait une fonction executée en parallele du traitement principal, afin de...

    et la je me stoppe, j'ai confondu avec thread...

    dsl...
    je laisse le texte dessus (bien qu'il soit inutil...)

    donc, je re-fait ma question : comment fait on pour lancer un thread?

    ce que je sait : c'est un bout de code lancé en parallele.
    ce que je croit savoir : il partage la meme zone memoire, et a donc acces aux variables globales.
    ce que je ne sait pas :
    - la syntaxe pour le lancer
    - ... et plein d'autres choses

    j'ai regardé dans la faq c++, mais je n'ai rien trouvé

    j'(ai bien trouvé ce bout de code censé lancer un thread, mais je ne le comprend pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    static DWORD WINAPI ThreadLauncher(void *p){
    	struct thread_param *Obj = reinterpret_cast<struct thread_param*>(p);               
    	serveur *s = Obj->ser;                          
    	return s->ClientThread(Obj->soc);       
    }
    source : http://khayyam.developpez.com/articl...threads/#LII-5(II-5. Les threads des clients )

    dsl de mes questions idiotes... j'essaie juste d'avoir une notion d'ensemble du c++ avant de me lancer dans un projet qui me semble complexe...

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Citation Envoyé par hansaplast
    soit j'ai vraiment trop delacunes, soit j'ai mal posé ma question :

    d'apres la faq que j'ai lut, je coprend la notion de poignée (certes, encore mieux grave a vos explications pertinentes, mici beaucoup )

    mais je n'arrive pas a faire le parallele avec les fonctions, en effet, j'ai toujours cru qu'un handle (croyance fausse, je m'en susi rendu compte) etait une fonction executée en parallele du traitement principal, afin de...

    et la je me stoppe, j'ai confondu avec thread...

    dsl...
    je laisse le texte dessus (bien qu'il soit inutil...)

    donc, je re-fait ma question : comment fait on pour lancer un thread?

    ce que je sait : c'est un bout de code lancé en parallele.
    ce que je croit savoir : il partage la meme zone memoire, et a donc acces aux variables globales.
    ce que je ne sait pas :
    - la syntaxe pour le lancer
    - ... et plein d'autres choses

    j'ai regardé dans la faq c++, mais je n'ai rien trouvé

    j'(ai bien trouvé ce bout de code censé lancer un thread, mais je ne le comprend pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    static DWORD WINAPI ThreadLauncher(void *p){
    	struct thread_param *Obj = reinterpret_cast<struct thread_param*>(p);               
    	serveur *s = Obj->ser;                          
    	return s->ClientThread(Obj->soc);       
    }
    source : http://khayyam.developpez.com/articl...threads/#LII-5(II-5. Les threads des clients )

    dsl de mes questions idiotes... j'essaie juste d'avoir une notion d'ensemble du c++ avant de me lancer dans un projet qui me semble complexe...
    Pour lancer un thread sous windows tu peux utiliser la fonction CreateThread ( pour les paramètres je te renvoi à la documentation sur le site msdn).

    Le code que tu montres ressembles plus à la fonction que dois executer ton thread et surement pas à la création du thread en lui même.

    Qu'est que tu veux savoir d'autres ?

  6. #6
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    merci bcp de ta reponse.

    j'ai une derniere question : y'a t il une methode unifiée (cad : multi OS) afin de lancer un thread?

    dans tous les cas, je fonce voir la odc de Wxwidgets qui le permet peut etre

    merci encore

  7. #7
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Citation Envoyé par hansaplast
    merci bcp de ta reponse.

    j'ai une derniere question : y'a t il une methode unifiée (cad : multi OS) afin de lancer un thread?

    dans tous les cas, je fonce voir la odc de Wxwidgets qui le permet peut etre

    merci encore
    Pas à ma connaissance.

  8. #8
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    bon, merci pour tout, je n'ai rien trouvé dans la doc, je met donc le sujet en resolut

    ps : peut etre serait il bien de rajouter la notion de thread dans la faq, et de preciser qu'il existe un appel different par OS

  9. #9
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Citation Envoyé par hansaplast
    bon, merci pour tout, je n'ai rien trouvé dans la doc, je met donc le sujet en resolut

    ps : peut etre serait il bien de rajouter la notion de thread dans la faq, et de preciser qu'il existe un appel different par OS
    Tu as regardé du côté de boost ? Je ne connais pas trop mais peut être qu'il gére les threads d'une façon portable, je ne sais pas.

  10. #10
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Citation Envoyé par hansaplast
    j'(ai bien trouvé ce bout de code censé lancer un thread, mais je ne le comprend pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    static DWORD WINAPI ThreadLauncher(void *p){
    	struct thread_param *Obj = reinterpret_cast<struct thread_param*>(p);               
    	serveur *s = Obj->ser;                          
    	return s->ClientThread(Obj->soc);       
    }
    source : http://khayyam.developpez.com/articl...threads/#LII-5(II-5. Les threads des clients )
    ce code est celui de la fonction invoquee par le CreateThread appele plus haut dans mon code. C'est donc la fonction qui sera dans le thread, celle qui sera executee en parallele.

    voila la creation du thread en tant qu'objet systeme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hProcessThread = CreateThread(NULL, 0,&serveur::ThreadLauncher, &p,0,NULL);
    J'avais juste utilise une fonction intermediaire (mon ThreadLauncher) pour pallier des problemes de fonctions membres expliques dans la faq.

    Citation Envoyé par hansaplast
    y'a t il une methode unifiée (cad : multi OS) afin de lancer un thread?
    pas a ma connaissance, mais on peut ruser et avoir un code avec des threads portable, en utilisant des bibliotheques qui ont reimplemente la notion de thread. suivez mon regard ... QT avec ses QThreads, fox toolkit et ses FXThreads , SDL et ses SDL_Threads ...

  11. #11
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    @ tous les deux : merci encore

    SDL et ses SDL_Threads ...
    je vait aller voir SDL_Threads car j'ai besoin d'une biblio graphique dans mon projet (et du coup, je sait que choisir entre allegro et SDL)

    voila, d'une pierre deux coups

    juste pour info :
    boost : http://www.boost.org/doc/html/threads.html

    SDL : http://www.libsdl.org/intro.fr/usingthreadsfr.html

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/08/2009, 11h39
  2. [Question] Qu'est-ce qu'un Handle ?
    Par QAYS dans le forum Delphi
    Réponses: 4
    Dernier message: 18/04/2007, 12h26
  3. [FOREIGN KEY] petite question bete ...
    Par dzincou dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 16h35
  4. Réponses: 5
    Dernier message: 25/11/2003, 10h02
  5. question bete
    Par hervecourtat dans le forum ASP
    Réponses: 8
    Dernier message: 07/11/2003, 11h49

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