Comment appeler une fonction dans un Thread déjà lancé ?
lunnorey
Messages postés39Date d'inscriptiondimanche 11 octobre 2009StatutMembreDernière intervention 9 mai 2015
-
Modifié par lunnorey le 18/10/2013 à 22:58
lunnorey
Messages postés39Date d'inscriptiondimanche 11 octobre 2009StatutMembreDernière intervention 9 mai 2015
-
20 oct. 2013 à 17:41
Bonjour,
Je suis actuellement bloqué par un problème de Thread. Je voudrais appeler une fonction dans une classe qui se trouve être dans un Thread.
Pour vous faire comprendre, si je m'exprime mal.
public class classThread {
private bool fin ;
public void init(){
fin = 0;
}
public void fonctionCible(){
' à exécuter
fin = 1;
}
}
class Program {
static void Main(string[] args) {
classThread cT = new classThread();
Thread myThread = new Thread(new ThreadStart(cT.init()));
' Celà ne fonctionnne évidement pas mais c est le principe.
cT.fonctionCible();
}
}
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 18 oct. 2013 à 23:26
Bonsoir,
Cet appel doit être fait dans le thread.
Une fonction peut être appelée par plusieurs thread.
Tu peux aussi gérer une pile d'appels à faire avec un Queue<T> de Delegate.
lunnorey
Messages postés39Date d'inscriptiondimanche 11 octobre 2009StatutMembreDernière intervention 9 mai 20153 18 oct. 2013 à 23:31
Pourrais-tu écrire un exemple en utilisant celui déjà existant, s'il te plait ? J'ai du mal à comprendre :/
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 18 oct. 2013 à 23:33
public void init(){
fin = 0;
fonctionCible();
}
lunnorey
Messages postés39Date d'inscriptiondimanche 11 octobre 2009StatutMembreDernière intervention 9 mai 20153 18 oct. 2013 à 23:37
Oui, c'est une solution mais dans ce cas là, le but et de lancer la fonction de l'extérieur du Thread.
- Le thread est lancé, il fonctionne en continu, fais son travaille
- Sur la console ont souhaite appeler une fonction de la class dans le thread..
Je sais pas si tu m'as bien compris, je suis pas sur que ce soit explicite..
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 19 oct. 2013 à 00:08
Donc ton problème est de faire une file d'attente pour les appels d'un thread vers un autre.
Renseignes-toi sur les Delegate et sur la classe Queue<T>.
Attention, regardes aussi l'instruction "Lock".
Dans le principe, le thread principal va "empiler" un Delegate dans la file du thread, quand le thread sera libre, il va prendre le prochain Delegate disponible.
Il te faudra faire une boucle pour maintenir le thread actif et ne pas oublier d'envoyer un signal d'arrêt au thread (méthode à voir).
lunnorey
Messages postés39Date d'inscriptiondimanche 11 octobre 2009StatutMembreDernière intervention 9 mai 20153 20 oct. 2013 à 12:22
Bonjour, j'ai effectuer des recherches mais ça n'a pas abouti.. Pourrais-tu m'aider avec un exemple ?
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 20 oct. 2013 à 15:02
Dans ton thread :
Tant que je peux tourner :
Si il y a quelques chose dans la file des Delegate
Executer le Delegate
Sinon
Pause
FinSi
FinTantQue
Il te faut une file d'attente, en variable globale, de Delegate
lunnorey
Messages postés39Date d'inscriptiondimanche 11 octobre 2009StatutMembreDernière intervention 9 mai 20153 20 oct. 2013 à 17:41
18 oct. 2013 à 23:31
18 oct. 2013 à 23:33
18 oct. 2013 à 23:37
- Le thread est lancé, il fonctionne en continu, fais son travaille
- Sur la console ont souhaite appeler une fonction de la class dans le thread..
Je sais pas si tu m'as bien compris, je suis pas sur que ce soit explicite..