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

Threads & Processus C++ Discussion :

Problème de thread ?


Sujet :

Threads & Processus C++

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 168
    Points : 120
    Points
    120
    Par défaut Problème de thread ?
    Bonjour,
    je développe une application qui fait souvent appel au threads.

    en premier lieux il crée un premier thread qui permettra a une Socket Client d'attendre l'arrivé de texte , en fonction du texte ce même thread va effectuer une des actions grace a une fonction de lecture , jusque la tous fonctionne , mais lorsque je désire crée un autre thread a l’intérieur deautre cette fonction de lecture tous le programme ce ferme.

    j'ai remarquer cependant que si apres le createthread de la fonction je rajoute un while (true) { Sleep(1) } , le thread fonctionnera , j'ai donc l'impression que l'erreur est causer par la fin de la fonction qui appel le thread ?

    problème de multithread ?

    je sais qu'en Delphi il existe IsMultiThread mais en C++ il y a un équivalent ? merci d'avance

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Un petit bout de code pour essayer d'y voir un peu plus clair ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 168
    Points : 120
    Points
    120
    Par défaut
    C'est quelque chose dans ce style :

    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
    DWORD _createSocketThread(){
    WSAStartup();
    ...
    ...
    if (connect(...))...
    while (true){
    if (recv(s,buf,sizeof buf,0) > 0) {
    //fonction de reception des strings venant du serveur...
    fonctionReadSocket(buf); // read
    ...
    }
    ...
    }
    ...
    }
     
    //le prob
    void fonctionReadSocket(char buf[2048]){
    //char to string.
    if (monString == "process"){
    DWORD ThreadID = 0;
    CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)_SendProcessData, (LPVOID)&testTableau, 0, &ThreadID);
    }
    }
     
    void entryPoint(){
     
    DWORD SockThreadID = 0;
    CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)_createSocketThread, 0, 0, &SockThreadID); // Je lance le thread principal de connexion au server et reception des commandes.
     
    }
    Voila c'est au niveau du thread _SendProcessData que sa plante , le thread s'arrête brusquement et un message d'erreur s'affiche.
    si en dessous du lancement du thread je met un Sleep(5000) par exemple la sa fonctionne , j'ai donc l'impression que c'est causer par le fait que je crée un thread dans une fonctions qui une fois arrivé a la fin (de cette fonction) fait tous planter si le thread n'a pas eu le temps de ce finir...
    je ne suis pas sur cependant .

    En Delphi avec les même API je n'est jamais eu ce problème au sein d'une fonction.

    Merci d'avance

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    On peut voir _SendProcessData() (un peu mieux présenté et indenté ) ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 168
    Points : 120
    Points
    120
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void * _transferSendData(LPVOID param){
        //Getting the thread param from param pointer
        TDataThread *_infos  = reinterpret_cast<TDataThread*>(param);
        string lParam1 = (*_infos).Datas; // c'est la que sa foire
        int lParam2 = (*_infos).localSock; // Get local sock for network identification
        string lParam3 = (*_infos).fType; // Function type (TRANSFER,Data,Upload...)
        ....
       le reste fonctionne tres bien :) 
    }
    par contre sa foire pas si je ralenti la fermeture de la fonction qui crée ce thread

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 082
    Points : 12 139
    Points
    12 139
    Par défaut
    Le plus probable, pointeurs sur des variables locales passé à un autre thread.

    A la fin de la méthode définissant les variables locales, ces variables ne sont plus valides.

Discussions similaires

  1. Problème de thread : Plus de ressources système
    Par OliverSleep dans le forum C++Builder
    Réponses: 17
    Dernier message: 07/02/2006, 15h35
  2. [VB.NET] Problème de Thread
    Par Sadneth dans le forum ASP.NET
    Réponses: 26
    Dernier message: 31/01/2006, 10h12
  3. Problème synchronisation threads
    Par Linio dans le forum Concurrence et multi-thread
    Réponses: 19
    Dernier message: 11/01/2006, 16h57
  4. [MFC] Problème de Threads + Timers
    Par Invité dans le forum MFC
    Réponses: 8
    Dernier message: 30/11/2005, 10h51
  5. [VC++6][DX9] Problème de thread lors d'un blit ...
    Par grandjouff dans le forum DirectX
    Réponses: 2
    Dernier message: 12/06/2003, 22h22

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