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

Visual C++ Discussion :

Threads windows this est null dans le constructeur


Sujet :

Visual C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Par défaut Threads windows this est null dans le constructeur
    Bonjour les gens,

    Voilà, je bosse sur un projet qui est mutli threadé. J'utilise VC++ 2005. (avec les functions CreateThread etc...), et lorsque j'appelle le constructeur d'une classe, mon this est null, et c'est vraiment incompréhensible, étant donné que je ne fais rien d'autre que l'appel au constructeur, alors évidement, lorsque j'essaie de setter les attributs de l'objet, le programme SIGSEV.

    Est ce que c'est normal, je m'y prends peut-être mal ?

    Je me suis dit c'ets peut ête comme en Java this est peut-être null dans le constructeur (sisi, ça arrive parfois) alors j'ai divisé mon contrusteur en 2
    -> Constructeur
    -> initialisation
    mais ça plante pareil.. De l'aide ???

    Voilà le bout de code qui plante :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
     
    //macros compatibilité linux
    #ifdef WIN32
    # include <windows.h>
    # define SLEEP(A) Sleep((A))
     
    # define thread_hdl								HANDLE
    # define CREATE_THREAD(hdl, attr, fct, param)	hdl = CreateThread (0, 0, (LPTHREAD_START_ROUTINE)fct, param, 0, 0)
    # define JOIN_THREAD(hdl, ret)					WaitForSingleObject(hdl, INFINITE)
     
    # define mutex_hdl								HANDLE
    # define CREATE_MUTEX(mut, attr)				mut = CreateMutex((LPSECURITY_ATTRIBUTES)MUTEX_ALL_ACCESS, false, 0)
    # define LOCK_MUTEX(mut)						WaitForSingleObject(mut,INFINITE)
    # define UNLOCK_MUTEX(mut)						ReleaseMutex(mut)
    # define DESTROY_MUTEX(mut)						CloseHandle(mut)
     
    # define cond_hdl								HANDLE
    # define CREATE_SIGNAL(sig, attr)				sig = CreateEvent((LPSECURITY_ATTRIBUTES)EVENT_ALL_ACCESS, false, false, 0)
    # define SEND_SIGNAL(sig)						SetEvent(sig)
    # define WAIT_SIGNAL(sig, mut)					WaitForSingleObject(sig, INFINITE)
    # define DESTROY_SIGNAL(sig)					CloseHandle(sig)
    #else
    # include <pthread.h>
    # define SLEEP(A) usleep(A * 1000)
     
    # define thread_hdl								pthread_t
    # define CREATE_THREAD(hdl, attr, fct, param)	pthread_create(&hdl, attr, fct, param)
    # define JOIN_THREAD(hdl, ret)					pthread_join(hdl, ret);
     
    # define mutex_hdl								pthread_mutex_t
    # define CREATE_MUTEX(mut, attr)				pthread_mutex_init(&mut, attr)
    # define LOCK_MUTEX(mut)						pthread_mutex_lock(&mut)			
    # define UNLOCK_MUTEX(mut)						pthread_mutex_unlock(&mut)	
    # define DESTROY_MUTEX(mut)						pthread_mutex_destroy(&mut)
     
    # define cond_hdl								pthread_cond_t
    # define CREATE_SIGNAL(sid, attr)				pthread_cond_init(&sig, attr)
    # define SEND_SIGNAL(sig)						pthread_cond_signal(&sig)
    # define WAIT_SIGNAL(sig, mut)					pthread_cond_wait(&sig, mut)
    # define DESTROY_SIGNAL(sig)					pthread_cond_destroy(&sig)
    #endif
     
    //!macros compatibilité linux
     
    Stream::Stream (std::string& s)
    {
       filename_ = s;
    }
     
    void Stream::Init(std::string& s)
    {
       iformat_ = 0;
       opened = false;
       stop_requested = false;
       playing = false;
       paused = false;
       opened = false;
       CREATE_MUTEX(this->mut_packet_queue_, 0);
    //   CREATE_SIGNAL(this->cond_packet_queue_, 0);
     
       CREATE_MUTEX(this->mut_data_queue_, 0); // le debuggeur pointe la dessus lorsque le programme plante
       //CREATE_SIGNAL(this->cond_data_queue_, 0);
    }
    Voilào, merci d'avance pour la réponse...

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 390
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 390
    Par défaut
    Peut-on voir comment tu "appelles" le constructeur ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. plantage quand une valeur est nulle dans une requete
    Par vinze60 dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 29/04/2013, 21h55
  2. [Websphere Portal] pumaProfile.getCurrentUser() est null dans les Themes WebSphere 6.
    Par madjic_ouf dans le forum Portails
    Réponses: 6
    Dernier message: 23/06/2008, 14h26
  3. Réponses: 6
    Dernier message: 14/03/2006, 19h44
  4. Réponses: 5
    Dernier message: 12/03/2006, 14h38
  5. Window.opener est null ?
    Par TekP@f dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 25/08/2005, 17h51

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