sordnil
Messages postés5Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention18 avril 2006
-
17 avril 2006 à 21:35
sordnil
Messages postés5Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention18 avril 2006
-
18 avril 2006 à 15:18
Bonjour,
Pour un projet j'ai besoin de faire communiquer deux thread entre eux : mon main() et un thread que je crée a partir de celui-ci.
Pour celà, je voulais utiliser les tubes nommés, mais je n'arrive vraiment à rien depuis presque 2 semaine et ça commence a devenir urgent (mon projet est a rendre pour la fin de la semaine)
Pour commencer, je doute que ce soit normal que le HANDLE de mon tube est toujours la meme valeur 0x000007A8, non ?
Déroulement de mon programme pour tester :
main > creation tube nommé (CreateNamedPipe) > création Thread (CreateThread) > Connexion au tube (ConnectNamedPipe) > Attente connexion d'un client (WaitNamedPipe) > lecture du tube (ReadFile) > FlushFileBuffers > DisconnectNamedPipe > fermer le thread et le tube
thread créé > connexion au tube (ConnectNamedPipe) > Ecrire dans le tube (WriteFile) > DisconnectNamedPipe
j'ai une erreur au moment de mon WriteFile me retourne 0 et GetLastError() m'indique alors une erreur 536
J'ai essayé plein de bidouilles mais ça marche toujours pas... Si quelqu'un a une idée pour m'aider, ou meme me donner un exemple simple ! (je veux utiliser les tubes en mode non bloquant)
voici mon code juste pour mes essais (j'ai besoin d'etre en mode non-bloquant pour les tubes, et meme le ReadFile normalement)
> http://tibobrard.free.fr/thread.cpp
Je vous remercie beaucoup beaucoup beaucoup d'avance !
sordnil
Messages postés5Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention18 avril 2006 17 avril 2006 à 22:45
Simplement car j'ai rien trouvé de comprehensible comme exemple sur internet avec les tubes anonymes :p (sous Unix c'est telment simple a utiliser pourtant... )
En faite en gros j'ai besoin de pouvoir passer une structure contenant 1 booléen et 2 entiers d'un thread à l'autre. L'un des thread effectue une tache en continue (envoyer une trame) pendant que l'autre permet à l'utilisateur de modifier celle-ci. Mon problème viens vraiment de "comment passer cette structure d'un thread a un autre" !
En utilisant les socket ça fonctionne très bien (j'utilise dans un autre cas), mais là il faudrait vraiment utiliser des tubes annonymes, nommé, ou zone de mémoire partagée. Mais je n'arrive pas a trouver de tuto/doc exploitables sur Internet. C'est pourquoi je vous solicite car jusqu'a présent j'avais réussit a trouver toutes les infos sur ce site (ma partie thread de mon programme de test est inspiré d'un poste du forum je crois bien)
Merci d'avance (ça devient très urgent, j'ai encore tout le rapporta faire pour mon proger que je doit rendre vendredi !)
sordnil
Messages postés5Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention18 avril 2006 17 avril 2006 à 23:03
Pour la variable globale, ça fait "pas propre" comme ils disent nos profs (ils n'aiment meme pas du tout), et la variable globale ne l'ai que dans le fichier courant, hors là j'ai 8 classes.
Pour les tubes annonymes, il n'y a pas besoin de 'connect' et compagnie ? juste besoin du HANDLE ?
Sinon pour revenir a se que je disais, que le HANDLE etait toujours la meme valeure, meme apres modification du programme et recompilation c'est normal que ce soit TOUJOURS le meme ?
Je vais essayer ça demain voir si ça fonctionne, merci de votre aide je vous tient au courant
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 17 avril 2006 à 23:05
Oui c'est normal que la valeur ne change pas, tu n'a pas à t'en soucier (du moment que ce n'est pas INVALID_HANDLE_VALUE)
Je vois pas pourquoi une variable globale n'est pas propre. Les threads sont dans le même espace d'adressage, donc je vois pas le pb
sordnil
Messages postés5Date d'inscriptionvendredi 18 juin 2004StatutMembreDernière intervention18 avril 2006 18 avril 2006 à 15:18
Salut,
Merci à tous de votre aide, je vais tout compte fait utiliser une
structure qui sera une variable globale, c'est beaucoup plus simple et
surtout : ça fonctionne :) (enfin ça a l'air pour le moment). Je n'ai meme pas besoin de synchroniser ça avec des sémaphore par rapport a mon utilisation.