Multithreading

Résolu
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 - 8 avril 2008 à 10:39
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 - 8 avril 2008 à 12:01
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

billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
8 avril 2008 à 11:02
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
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 38
8 avril 2008 à 11:04
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]
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 38
8 avril 2008 à 11:09
pas assez rapide... c'est ça quand on va lire les signatures avant ;)

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
8 avril 2008 à 11:28
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 ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
8 avril 2008 à 11:35
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
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
8 avril 2008 à 11:41
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
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
8 avril 2008 à 11:42
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
0
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
8 avril 2008 à 11:44
Ton auto réponse est exacte.
Soit tu fais:
- un tableau
- une structure
- une classe

Tout dépend de ta logique ^^
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
8 avril 2008 à 11:47
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
0
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
8 avril 2008 à 12:01
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 ^^
0