ylerazer
Messages postés7Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 2 janvier 2007
-
29 nov. 2005 à 15:09
ylerazer
Messages postés7Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 2 janvier 2007
-
4 déc. 2005 à 08:31
Bonjour,
je suis nouveau en C# et j'essaie de me faire des classes intelligentes .. mais j'ai bien peur qu'elles ne soient plus intelligentes que moi. Voici mon problème : ( j'ai enlevé les properties ... pour etre le plus synthétique possible )
au passage RV est une techno TIBCO qui permet de faire du temps réel ... ( c'est comme si on faisait de l'udp mais avec la notion de sujet auquel on souscrit ... )
public class RVConsumer :
{
private Thread t;
private System.Collections.Queue myQueue;
//Realtime status
public void start()
{
isListenning = true;
t = new Thread(new ThreadStart(listen));
t.Name = this.ToString();
// listen();
}
public void restart()
{
stop();
isListenning = true;
t = new Thread(new ThreadStart(listen));
}
public void stop()
{
isListenning = false;
t.Abort();
}
// Reception Message and event
private void listen()
{
try
{
TIBCO.Rendezvous.Environment.Open();
Transport transport = null;
transport = new NetTransport(Service,Network,Daemon);
Listener listener = new Listener(Queue.Default,transport,Subject,null);
listener.MessageReceived += new MessageReceivedEventHandler(OnMessageReceived); // --> ici je place ma fonction dans la pile d'execution sur reception d'un message ...
while (isListenning)
{
Queue.Default.Dispatch();
}
TIBCO.Rendezvous.Environment.Close();
}
catch (RendezvousException exception)
{
System.Diagnostics.Debug.WriteLine("Exception while listenning :");
System.Diagnostics.Debug.WriteLine(exception.Message);
}
}
void OnMessageReceived(object listener,MessageReceivedEventArgs messageReceivedEventArgs)
{
Message message = messageReceivedEventArgs.Message; if (myQueue null) {myQueue new System.Collections.Queue();}
myQueue.enqueue(message); // --> et la c'est le drame ... je n'arrive pas a empiler ...
}
}
}
Pouvez vous m'aider ? et d'ou sort le Invoke que je lis partout ... sachant que la classe qui va gérer celle ci n'est pas un formulaire ???
ylerazer
Messages postés7Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 2 janvier 2007 29 nov. 2005 à 16:00
Je l'ai lu ... et voila mon problème ....
-- Ensuite, créons le délégué correspondant
-- private delegate void ChangeLabel(stringstr);
-- Lutilisation de la méthode Invoke seffectue ainsi, dans la méthode ThreadMethod
-- this.Invoke(newChangeLabel(ChangeLabelText), "Label après opération");
--> la classe qui gère la queue est la meme et n'a pas de méthode invoke car ce n'est pas un formulaire et c'est la que je suis perdu ...
( au passage merci pour ta réactivité ... )
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 29 nov. 2005 à 17:00
j'ai regardé un peu, le probleme, c'est qu'on peut pas specialement tester ton code.
Donc j'ai fait une mini classe toute bete qui lance un thread et qui ajoute une string dans une Queue (et pas de mauvaise interpretation s'il vous plait )
Meme si c'est pas tres beau, j'ai fais le Queue.Add() dans le thread, et ca a parfaitement fonctionné.
Donc la petite question prealable, je ne vois aucun appel a Start(), ni a t.Start() dans ton code. Est-ce normal ?
ylerazer
Messages postés7Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention 2 janvier 2007 4 déc. 2005 à 08:31
Bonjour,
excuse moi pour le manque de réactivité ... mais j'ai été pris par mon boulot et du coup je ne m'y suis remis que le vendredi après midi...
en fais, j'ai continuer a lire et je me dirige tout droit vers l'utilisation d'un pool de thread. Et j'irai l'interroger toutes les 250 ms pour pouvoir ensuite passer ou non un evenement a mon thread principal....
Je vais tout de meme essayer ton aide voir si j'y arrive.
Milles merci. je te tiens au courant ... ( j'ai re acces au code lundi)