Multithreading

[Résolu]
Signaler
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
-
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
-
Salut à tous,

J'ai déjà utiliser les threads mais là je me retrouve sur une colle, j'aurais besoin que mon thread éxécutant une sous-routine puisse se stopper en cas de problème, alors j'ai bien le début du code mais je vois pas comment arrêté le thread dans le catch :

System.Threading.

Thread newT =
new System.Threading.
Thread(
new System.Threading.
ThreadStart(checkF));
newT.Start();

private
void checkF()
// On synchronise les fichiers ayant une date de modification différente{
Try
   {...Actions du thread...}
Catch 
   { Comment stopper ce thread et pas un autre ??? }
}

Sachant que je peux avoir n Thread... je ne vois pas du tout le truc
Sans compter que ce thread doit récupérer 2 arguments mais je ne vois pas comment non plus.

Pourriez-vous m'aider à trouver ma voie ??
Merci d'avance tout le monde !

 Chris...
web : Firstruner

10 réponses

Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
26
Salut,

Pour ta première question; concernant l'arrêt du thread, il te suffit tout simplement de sortir de la fonction avec un 'return'. Car si tu n'as pas de boucle dans un thread, le thread se terminera et pas besoin de l'arrêter à la brute avec un 'Thread.Abort' (que tu pourrais utilisé aussi).


Pour ta deuxième question concernant le paramètre (en espérant que tu es sur le framework 2.0 ou plus), utilises le 'ParameterizedThreadStart' au lieu de 'ThreadStart': MSDN, http://msdn2.microsoft.com/fr-fr/library/system.threading.parameterizedthreadstart(VS.80).aspx . N'oublies pas de mettre un paramètre 'object' pour ta méthode checkF (regardes l'exemple de la MSDN).

Si tu n'es pas en framework 2.0, je te conseille de créer un classe (Process par exemple) qui prendra tes arguments dans le contructeur. Ainsi, tu pourras appeler une méthode (Start par exemple) de l'objet créé. L'objet aura alors accès à ses membres, et donc, aux paramètres.


Bonne journée,

Billou_13
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
37
lol... c'est marrant... ca colle pas avec ton site... bref...

pour donner à manger à ton thread (arguments) tu peux utiliser le delegate ParameterizedThreadStart

Quant à stopper le thread, utilise Thread.Abort();

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
37
pas assez rapide... c'est ça quand on va lire les signatures avant ;)

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
26
C'est moi qui me fait tout le temps avoir d'habitude. Alors, si je peux le faire à quelqu'un à mon tour, j'en suis heureux lol

Bonne journée à tous,

PS: la prochaine, c'est la tienne ^^
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
16
Merci à vous deux

pour le site en fait j'ai pas de compte sur ce site, c'est le responsable qui m'a pris en stagiaire et j'utilise son compte quand j'ai besoin, je vais fair ele miens ce sera plus simple

je vais voir cette histoire de ParametizedThread, ça devrait m'aller et pour le return c'est toujours plus simple ainsi

Chris...
Web : Firstruner
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
16
Chouillette question de plus, si je veux envoyé 2 paramètre à mon thread je n'aurais pas le choix que de faire une classe contenant les données... ?

Chris...
Web : Firstruner
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
16
En fait non je crois que le plus simple est d'instancier un Arraylist qui contiendra les divers objets...
sauf si vous avez plus simple...

Chris...
Web : Firstruner
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
26
Ton auto réponse est exacte.
Soit tu fais:
- un tableau
- une structure
- une classe

Tout dépend de ta logique ^^
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
16
Oui mais par exemple le thread peut-il démarrer avec un tableau d'objet ?

Exemple :

myThread.Start(new object[] {args1, arg2, arg3...})

private void threadStarter(object[] args) {...}

Chris...
Web : Firstruner
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
26
Je ne pense pas comme cela.
Par contre, tu peux tout à fait envoyer une liste générique d'objet : 'List<T>' car cette liste est un objet ^^