Thread + NetworkStream

cs_JuS Messages postés 121 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 20 mars 2009 - 13 mai 2004 à 13:46
Ax2Prog Messages postés 5 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 28 juin 2005 - 9 nov. 2004 à 14:45
Je vais vous exposer mon problème (c'est un peu long à lire et à comprendre...)

Je programme un programme client/serveur.
Le client, en C#, communique avec un serveur; Pro*C sous Unix. J'usque là tout va bien ...
Le problème est le suivant.
Après m'être connecté au serveur, je lance un thread sur le client pour qu'il écoute tout ce qu'il vient du serveur, mais qu'il ne réponde qu'à un certain type de message.
Pendant ce temps, à l'aide du client je peux envoyer des demandes au serveur qui me répond. :sad)
Mon prog et le thread font appel à une même fonction qui récupére ce qu'il y a sur le buffer à l'aide de :

this.networkStream.Read(bMsgReceive, 0, 300);


Et sur le Read, l'appli s'arrête, ne renvoie plus rien, ne répond plus ...

Quelqu'un aurait-il une idée ?
Est-ce qu'il faut que je passe par un apel asynchrone et la méthode BeginRead du type AsyncCallback ?

-=[JuS]=-

3 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
13 mai 2004 à 14:45
d'apres mes connaissances (encore peu developpées) Read est bloquante donc si tu l'appelle depuis le thread de l'appli, celui ci bloque tant qu'il n'y a rien a lire
donc d'apres moi soit tu passes en asynchrone, soit tu fait un 2eme thread

Cocoricoooooooo !!!!
0
cs_JuS Messages postés 121 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 20 mars 2009 1
13 mai 2004 à 14:57
Ah oui effectivement ça à l'air d'être la cause du freeze de l'appli ...

Bon ba je vais essayer de réparer ça !
Vive la prise de tête avec les Threads !

-=[JuS]=-
0
Ax2Prog Messages postés 5 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 28 juin 2005
9 nov. 2004 à 14:45
Moi personnellement pour la synchronisation des threads sur une ressource j'utilise le mot clé "lock" :

exemple :

lock(ObjetPartageParLesThreads)
{//l'acces a "ObjetPartageParLesThreads" est blocké aux autres //threads (

ObjetPartageParLesThreads.FonctionUtile();

}//l'acces a "ObjetPartageParLesThreads" est déblocké aux //autres threads

Attention a ne pas blocker l'acces aux ressources trop longtemps

A+ :)
0
Rejoignez-nous