begin process at 2010 02 10 09:52:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Thread et tubes


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Thread et tubes

lundi 17 avril 2006 à 21:35:51 | Thread et tubes

sordnil

    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)
 
Pour faire mon code, je me suis inspiré en partie de MSDN ( [ Lien ] )

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 !
lundi 17 avril 2006 à 22:14:29 | Re : Thread et tubes

Taron31

Membre Club
A quoi correspond l'erreur 536 ? Essaie FormatMessage pour display la string de l'erreur et postre là...

___________________
MVS
- Most Valuable Student ( Microsoft)
lundi 17 avril 2006 à 22:20:20 | Re : Thread et tubes

sordnil

l'erreur 536 est la suivante :

Waiting for a process to open the other end of the pipe. ERROR_PIPE_LISTENING

mais ça m'aide pas beaucoup personnellement ^^
lundi 17 avril 2006 à 22:35:47 | Re : Thread et tubes

vecchio56

Administrateur CodeS-SourceS
La valeur du handle ne change pas: c'est normal (c'est une index dans une table, donc la même exécution va te donner les mêmes valeurs). Pourquoi as-tu besoin d'une tube nommé? J'ai déja utilisé les tubes, et CreatePipe me suffisait
lundi 17 avril 2006 à 22:45:21 | Re : Thread et tubes

sordnil

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
lundi 17 avril 2006 à 22:50:48 | Re : Thread et tubes

vecchio56

Administrateur CodeS-SourceS
Réponse acceptée !
HANDLE hReadPipe, hWritePipe; SECURITY_ATTRIBUTES sa = {sizeof sa, NULL, 1}; CreatePipe(&hReadPipe, &hWritePipe, &sa, 0); Un processus écrit dans hWritePipe et l'autre lit dans hReadPipe Mais tu sais qu'une variable globale peut te suffire, et un sémaphore pour synchroniser les deux threads?
lundi 17 avril 2006 à 23:03:03 | Re : Thread et tubes

sordnil

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
lundi 17 avril 2006 à 23:05:25 | Re : Thread et tubes

vecchio56

Administrateur CodeS-SourceS
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
mardi 18 avril 2006 à 00:46:22 | Re : Thread et tubes

ymca2003

le thread doit se connecter au pipe par CallNamedPipe ou CreateFile :
[ Lien ]

 

mardi 18 avril 2006 à 01:31:30 | Re : Thread et tubes

vecchio56

Administrateur CodeS-SourceS
Pas si le tube n'est pas nommé en tous cas

1 2

Cette discussion est classée dans : projet, connexion, thread, tube, tubes


Répondre à ce message

Sujets en rapport avec ce message

Socket et multithread. [ par mohdaef ] Bonjour à tous.Pour les besoins d'un petit jeu que je suis entrain de réaliser, j'ai besoin de créer un petit serveur pour la partir réseau du jeu. Ce Fonction Thread [ par morino1003 ] salut tout le monde.je veux faire une connexion entre host(mon pc) et un automate(Integra cobra 400).la connexion se fait par une liaison (demande/rep question sur thread [ par elbok ] j'ai essayé d'écrir ce code(j'utilise Visual C++ mais jécris en C application Win32) //je veux créer un thread qui fait appele à une procédure(veri Aide sur les exceptions [ par victorcoasne ] Bonjour,Je fais un petit serveur multi-threadé : un thread par connection acceptée.Si par exemple j'ai un timeout il renvoie une exception de type cha Savoir si l'exécution du thread est terminée [ par ndubien ] Bonjour, Comment savoir si l'exécution de mon thread est terminée (=la fonction à terminée son exécution) : HANDLE hCrypter = CreateThread( NULL, 0, C traitement de signaux radio [ par labouzaid ] j'ai un muni projet qui consiste a caracteriser les signaux radio(frequence,puissance ,amplutide,etc),le projet consiste a developpe un programme en C Interface Graphique en C++ avec un projet Win32 sous visual studio 2008 [ par othmane1950 ] Bonjour,La question que j'ai, est la suivante :Est ce que quelqu'un a un lien ou un cours... sur comment faire des interfaces graphiques sous visual s Connexion à un serveur unix avec ftp [ par staik194118 ] Bonjour les amis je dois me connecter sur un serveur unix(bien particulier) depuis ma machine (ubuntu) et ce via une connexion ftp afin de récupé connexion a base donnees SQL server [ par gochti ] Bonjour;je suis debutant en C++ avec compilateur visual studio c++ 6.0.S il ya quelqu un qui peux m aider a creer la connexion a une base donnees sqls Mini-projet en C : gestion d'une base de données [ par ddeftones ] Bonjour, j'ai un petit projet à réaliser en C. Il consiste à gérer une base de données.Par exemple une liste d'étudiants avec les champs nom, prénom e


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales