Bonjour,
Je cherche à faire communiquer 2 threads en C#.
Pour cela j'ai voulu mettre en place un pipe. Un thread qui écrit dedans (bloquant si plein) et un autre qui lit (non bloquant si vide). En général sur les systèmes que je connais c'est soit tout bloquant soit rien bloquant. Donc je m'en sors en choisissant le mode bloquant et en interrogeant "est-ce qu'il y a qqch à lire" avant la fonction de lecture. Mais voila les systèmes que je connais c'est pas Windows et pas C# (je viens de l'embarqué). Donc je me tourne vers vous pour progresser sur ces nouveaux chemins.
Pour le moment j'ai un code qui ressemble à :
Pour la création dans un premier thread
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 System.IO.Pipes.NamedPipeServerStream pipeServer = new System.IO.Pipes.NamedPipeServerStream("BackToFrontData", PipeDirection.InOut, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous, 100, 100); .... pipeServer.WaitForConnection(); ..... tmp[0] = (Byte)pipeServer.ReadByte(); // c'est ce read qui ne doit pas être bloquant .....
et dans le second thread :
Voila je débute en C#. Avant j'ai un peu développé en C sous windows et je me souviens qu'avec les API WIN32 j'avais des options et des API qui me permettaient de le faire. Mais il faut évoluer de temps en temps donc je suis passé à C# et la je suis bloqué.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 System.IO.Pipes.NamedPipeClientStream pipeClient = new System.IO.Pipes.NamedPipeClientStream("BackToFrontData"); ... pipeClient.Write(data, 0, 2); // c'est ce write qui doit attendre si le pipe est plein ..... .....
Merci pour votre aide.
Partager