cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008
-
16 sept. 2006 à 17:20
aogie
Messages postés108Date d'inscriptionvendredi 11 juillet 2003StatutMembreDernière intervention27 novembre 2007
-
17 sept. 2006 à 13:00
Bonjour,
Voilà mon problème. J'ai un thread que je veux mettre en
attente d'un événement AutoResetEvent. Pendant cette attente, je voudrais qu'il envoi l'éxécution d'une fonction. Pour le
moment avec MyAutoResetEvent.WaitOne(); le thread se met en attente
mais ne fais rien. J'avais dans l'idée donc de débord vérifier l'état
de AutoResetEvent, puis si il est à false éxécuter ma fonction et ensuite mettre le thread en attente.
J'aimerais donc savoir si il est possible de vérifier si une instance de AutoResetEvent est à l'atat true ou false ? Je ne trouve pas de propriété qui fasse celà. En existe t-il ?
aogie
Messages postés108Date d'inscriptionvendredi 11 juillet 2003StatutMembreDernière intervention27 novembre 2007 17 sept. 2006 à 10:56
Bonjour,
Si tu souhaites effectuer une opération dans un thread, en attendant un signal, tu peux effectivement utiliser WaitOne.
Mais avec un délai d'attente de ce signal.
Ex :
do
{
//fonction de traitement
}while (!myAuroResetEvent.WaitOne(1000, false));
Dans cet exemple, le thread appelle ta fonction de traitement puis attend un signal pendant une seconde.
Si oui, le thread s'arrête, sinon il appelle à nouveau la fonction...
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008 17 sept. 2006 à 11:58
Le problème c'est que si l'AutoResetEvent est à l'état true, je ne veux pas que la fonction soit appelée (Dans ton exemple, elle est forcément appelée au début). Si par contre l'AutoResetEvent est à l'état false, je voudrais que la fonction soit appelée pendant l'attente (WaitOne) mais seulement une seule fois (Dans ton exemple, elle est rappelée toutes les secondes).
Est-il possible de faire celà ?
aogie
Messages postés108Date d'inscriptionvendredi 11 juillet 2003StatutMembreDernière intervention27 novembre 2007 17 sept. 2006 à 13:00
Tu voudrais un mécanisme proche de l'Idle : si d'autres thread sont à l'oeuvre, je ne fais rien sinon j'effectue ma tâche de fond... As-tu jeté un coup d'oeil du côté de l'objet Monitor ? Tu peux tenter d'entrer dans une section critique et décider d'effectuer telle ou telle chose... A voir.