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 :

thread, interblocage ?


Sujet :

Threads & Processus C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 38
    Points : 9
    Points
    9
    Par défaut thread, interblocage ?
    bonjour,

    j'ai développé 1 projet C++ indépendemment d'un autre projet déjà terminé, et tous deux utilisant des threads via createthread().
    Indépendemment, les deux projets fonctionnent parfaitement, en l'occurence, le mien va lancer un thread qui va détecter la présence de nouveaux périphériques grâce à un callback, et l'autre projet une interface qui va contenir cette fonctionnalité.
    Maintenant, quand on assemble les deux projets, le tout compile, mais une fois lancé, mon thread ne se comporte plus comme il le ferait quand il était seul (il ne détecte plus de périphériques) et ce même si les deux projets ne partagent aucunes variables globales.

    Je ne sais pas du tout d'où cela pourrait venir, vous auriez des pistes pour les raisons de ce blocage ?

    merci

  2. #2
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Ca peut dépendre de beaucoup de choses, et pas forcément dû aux threads.
    Sans plus d'explications sur comment les deux projets sont interfacés, il est difficile de te répondre...
    Si ça se trouve, tu pensais que ton projet fonctionnait bien alors qu'en fait il "tombait en marche" .
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 38
    Points : 9
    Points
    9
    Par défaut
    le 1er projet est un OCX utilisé par un exécutable.
    Le 2e projet, le mien que j'ai développé à côté, est un exécutable qui va donc lancer un thread détectant la présence de nouveaux périphériques, et qui seul, marche (tu veux dire quoi par "tomber en marche" ? )

    tout ce que j'ai fais, c'est mettre les sources du 2e projet avec celles du 1er pour créer un seul projet, et à partir d'une fonction du 1er projet, appeler ce qui était à l'origine le main du 2e projet...
    rien d'autre, et je pensais que ça fonctionnerait pareil

  4. #4
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Par "tomber en marche" j'entends que c'est un coup de bol si ça a marché ou que il semblait marcher alors qu'en fait non.

    Peut-être que le thread est mal lancé, devenant bloquant, mais que comme il était le seul dans ton projet de départ, ça ne se voyait pas.

    Bref, il faudrait que tu fournisses au moins le code de
    • La fonction de lancement du thread de ton projet
    • L'ancien main de ton projet
    • L'appel à ton projet depuis le 1er projet
    Bien sûr, tu n'as pas besoin de nous donner tout ce qu'il y a dans ton code. Je te laisse l'épurer pour garder le strict minimum nécessaire .

    Citation Envoyé par bigbill
    Maintenant, quand on assemble les deux projets, le tout compile, mais une fois lancé, mon thread ne se comporte plus comme il le ferait quand il était seul (il ne détecte plus de périphériques) et ce même si les deux projets ne partagent aucunes variables globales.
    Citation Envoyé par bigbill
    tout ce que j'ai fais, c'est mettre les sources du 2e projet avec celles du 1er pour créer un seul projet
    Un peu contradictoire tu ne trouves pas?
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 370
    Points : 41 523
    Points
    41 523
    Par défaut
    Si tu utilises un OCX, es-tu sûr de ne pas avoir des problèmes de marshalling ?
    N'oublie pas qu'il ne faut jamais passer directement une interface d'un thread à un autre... Et que si l'OCX est mono-threadé, il s'exécutera toujours dans le thread qui l'a créé...
    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.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 38
    Points : 9
    Points
    9
    Par défaut
    désolé de répondre aussi tard, suite à ce que vous avez dit, j'ai fais d'autres tests et vu qu'apparament le problème ne venait pas d'un interblocage entre threads.

    En fait, j'aurais dû faire ça avant, j'ai isolé le code que j'avais fait (celui qui s'occupait uniquement de la détection des périphériques) pour en faire un ocx, que j'ai tout simplement lancé à partir d'une page html.
    Et le problème est le même, à savoir, les périphériques ne sont plus détectés comme il l'étaient avec l'exe. Là j'ai juste adapté le code de l'exe pour en faire un ocx, et je ne sais pas pourquoi il y a un changement de comportement
    Je ne pense pas que mon code "tombait" en marche quand il était sous la forme d'un exe...il détectait l'arrivée et le départ de tous les périphériques tant que l'exe était ouvert.

    Donc je me demande si ce n'est peut être un problème dans la compilation de l'ocx (j'ai pris les paramètres de base de visual studio, en rajoutant celles dont avait besoin mon code, mais peut être faut-il en rajouter d'autres), ou comme Médinoc l'a suggéré, un problème de marshalling...mais quels genre de problèmes pourrait-il y avoir pour le mashalling dans le cas d'un ocx ? il y a bien des manipulations sur des fichiers xml, mais en quoi cela pourrait bloquer la détection dans l'ocx alors qu'il ne bloquait pas en exe ?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 370
    Points : 41 523
    Points
    41 523
    Par défaut
    Eh bien comme je l'ai dit, si un OCX mono-thread est créé dans un thread et appelé depuis un autre, l'appel se fera dans le thread où l'OCX a été créé: Le thread appelant devra attendre.
    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. Problème d'interblocage de thread
    Par Nbibs dans le forum Concurrence et multi-thread
    Réponses: 0
    Dernier message: 30/05/2011, 18h32
  2. Problème d'interblocage de threads
    Par teddyalbina dans le forum C#
    Réponses: 1
    Dernier message: 25/04/2008, 22h33
  3. Probleme d'interblocage entre deux Thread
    Par brahimouledriah dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 08/11/2007, 09h20
  4. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  5. [Kylix] Pb de Thread !!
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 25/04/2002, 13h53

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