Maitrisez votre préparation <br> maximiser votre chance
Page d acceuil Acceuil
Bienvenue sur votre bureau MetaComputer
Page d acceuil Mes licences
Acquerir un logiciel ou un service MetaComputer
Page d acceuil Gestion commerciale :
Devis, commandes, stock...
connexion à modabbir bureau
Se retrouver dans un véritable marché
Page d acceuil Hassib (comptabilite generale) :
Saisir, importer votre balance..
Sortir vos etats fiscaux,
Envoyer votre declaration via internet
Page d acceuil Adae : Gestion de paye.. :
Gestion de personnels,
elaborer bulletins de paye
effectuer la declaration de CNSS
Page d acceuil Meta Clouds = MetaUSB.. :
Votre espace de stockage offert par
MetaComputer. c'eat aussi lié à vos base de données,
si vous travaillez avec une application MetaComputer
Page d acceuil Al Morakib
pour surveiller et controler par cameras
ma maison, mon lieu de travail, mes depots...
Page d acceuil Mes PCs :pour surveiller et controler
mes ordinateurs, ceux de mes enfants
et meme les pcs du lieu de travail
Page d acceuil Service Meta GPS :
Reperer vos vehicules
Suivre et controler a distance
tous vos vehicules..
Page d acceuil Meta FAX
Envoyer des FAX sans ligne
et sans apareil
Decoller...
Page d acceuil Emailer
Envoyer à des Miliers
des e-mails de prospection
Page d acceuil Service MetaSMS :
Envoyer et gerer vos SMS
Faire des compagnes publicitaires
Avec des résultats sures et optimaux
Page d acceuil Meta-eEntreprise :
Votre entreprise sur le net..
Lancer, suivre une action commerciale
Page d acceuil Meta-eFormation :
Des supports de formation tres adaptés
à votre développement personnel,
A une activité professionnelle de pointe...
Page d acceuil jeux :
jeux pour les enfants
aussi pour les grands
Super-Logiciels pour vous
AsSaydalani
Un logiciel pour la gestion pharmaceutique ... - ventes aux guichets, reglements
- utilisation de codes barres
- Base de données des médicament saisie et ajour
- Gestion des achats et des fournisseurs
- Gestion des peromptions
- ...
Al Tana9olat
Solution complète de la gestion des gares:
Quitances, voyages, loyers, ...
Al Hassib
Comptabilité générale, Liasse comptable marocaine ...
Al Fondoki
Logiciel de la gestion hôteliere:
Réservations, main courante, poits de vente, dépôts, occupation des chambres, ...
Plus
Projets pour vous
Net sou9 / e-souk
NetFavoris 
NOUS |  contacter-nous
Avenue des F.A.R. Rsidence Niama N6 - Ttouan (Maroc)
Tl :(+212) 8 90 60 52 25
Fax :(+212) 5 39 97 25 15
Mobile :(+212) 6 61 10 74 37
Email :mce@meta-computer.com
 

Acceuil  vb.net(507)  Les threads ou taches
Les threads ou taches 2011-02-05

Comment créer et lancer un thread ?
------------------------------------------------------
Pour créer un thread, il faut utiliser la classe System.Threading.Thread.


Considérons que l'on dispose d'une Form.
Nous avons besoin de déclarer notre objet thread à l'intérieur de la Form.

Imports System.Threading

Public Class Threads
Inherits System.Windows.Forms.Form

'........
Private _threadCalculs1 As Thread

End Class


La fonction exécutée par le thread a une signature imposée par le framework. Il s'agit du délégué System.Threading.ThreadStart.
C'est une fonction qui ne prend aucun paramètre et ne possède pas de valeur de retour.
On peut la déclarer ainsi dans notre Form.

Imports System.Threading

Public Class Threads
Inherits System.Windows.Forms.Form

'........

Private Sub ThrFunc1()
' Traitement effectué par le thread. Calculs est une fonction quelconque de notre Form
Try
Calculs(1000)
Catch ex As Exception
Debug.WriteLine(ex.ToString())
End Try
End Sub

End Class


Pour démarrer le thread, on utilise la fonction Start de la classe Thread.

Imports System.Threading

Public Class Threads
Inherits System.Windows.Forms.Form

'........

Private Sub StartThread()
_threadCalculs1 = New Thread(AddressOf ThrFunc1) 'ThrFunc est la fonction exécutée par le thread.
_threadCalculs1.Name = "Thread1" 'Il est parfois pratique de nommer les threads surtout si on en créé plusieurs.
_threadCalculs1.Start() ' Démarrage du thread.
End Sub

End Class

Comment passer un ou plusieurs paramètres à un thread ?
------------------------------------------------------------------------------
Le délégué System.Threading.ThreadStart utilisé pour les fonctions de thread ne prend pas de paramètre.
Passer des paramètres à un Thread revient donc à faire une classe contenant des membres qui serviront de
paramètres

Imports System.Threading

Public Class ThreadsForm
Inherits System.Windows.Forms.Form

' ........

'premier Thread de calcul
Private _threadCalculs1 As Thread
' Evénement pour signaler la fin des threads de Calcul
Private _endThreadCalculsEvent As New ManualResetEvent(False)

'Classe ThreadCalculs
Private Class ThreadCalculs

'form parente
Private _frm As ThreadsForm
'temporisation
Private _tempo As Integer

'Constructeur. frm et tempo sont les paramètres de notre Thread
Public Sub New(ByVal frm As ThreadsForm, ByVal tempo As Integer)
_frm = frm
_tempo = tempo
End Sub

'Fonction du Thread
Public Sub ThrFunc()
Try
_frm.Calculs(_tempo)
Catch ex As Exception
Debug.WriteLine(ex.ToString())
End Try
End Sub

End Class

'Calculs
Private Sub Calculs(ByVal tempo As Integer)

While Not _endThreadCalculsEvent.WaitOne(tempo, False)
'Calculs faits ici .....
End While

End Sub

'Démarrage du thread
Private Sub StartThread()

Dim myThreadObj As New ThreadCalculs(Me, 1000)
_threadCalculs1 = New Thread(AddressOf myThreadObj.ThrFunc)
_threadCalculs1.Name = "Thread1"
_threadCalculs1.Start()

End Sub


Comment arrêter un thread ?
--------------------------------------------------
Le meilleur moyen d'arrêter un thread est de laisser sa fonction se terminer.
Si une fonction de thread s'exécute en continu dans une boucle, il est nécessaire d'écrire un code qui prévoit une condition
pour sortir de la boucle. Cette condition doit pouvoir être modifiée par d'autres threads.


Reprenons l'exemple de notre Form (voir Q/R création d'un thread).
Pour signaler au thread que nous souhaitons qu'il s'arrête, nous allons utiliser un objet de la classe System.Threading.AutoResetEvent.
Dans la boucle de la fonction du thread, nous faisons attendre le thread pendant un court laps de temps.
Si l'objet AutoResetEvent passe à l'état signalé, alors on sort du thread.

Imports System.Threading

Public Class Threads
Inherits System.Windows.Forms.Form

'........

'Evènement de signal de fin de thread
Private _endThreadCalculsEvent As New AutoResetEvent(False)

'Pour arrêter le thread
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
_endThreadCalculsEvent.Set() 'L'evenement passe à l'état signalé
_threadCalculs1.Join() 'On attend la fin du thread.
End Sub

'Fonction du thread
Private Sub ThrFunc1()
Try
Calculs(1000)
Catch ex As Exception
Debug.WriteLine(ex.ToString())
End Try
End Sub

Private Sub Calculs(ByVal tempo As Integer)
'Si l'événement est à l'état signalé, WaitOne renvoie True et la boucle se termine.
While Not _endThreadCalculsEvent.WaitOne(tempo, False)
'C'est ici ou notre thread fait son travail
'.....
End While
End Sub

End Class


Il existe un moyen plus radical d'arrêter un thread, c'est l'utilisation de la fonction Thread.Abort.
Lorsque vous appelez Abort, le Runtime lève une exception ThreadAbortException que le thread peut alors intercepter.
C'est aussi pourquoi il est déconseillé d'utiliser Abort car on ne peut prévoir où en est le thread dans son traitement.
Lever une exception peut interrompre le thread alors qu'il est dans une partie du code qu'il doit terminer avant de sortir.
Un des exemples où on peut utiliser Abort sans risque : la fonction du thread est bloquée infiniment sur un appel
(une attente de connexion socket par exemple)

'Forcer la fin du thread
Private Sub AbortThread()
_threadCalculs1.Abort() 'On demande au runtime d'arrêter le Thread
_threadCalculs1.Join() 'On attend la fin du thread.
End Sub


Un thread terminé ne peut plus être relancé. Il faut instancier un nouvel objet Thread pour chaque démarrage de thread.


Comment changer le nom du thread courant ?
------------------------------------------------------------
Tout d'abord pensez à la clause "Imports System.Threading"
Pour changer le nom du thread courant, ajouter la ligne de code suivante :

Thread.CurrentThread.Name = "MainThread"


Ici on donne le nom "MainThread" au thread courant.

Si vous devez réaliser cela pour le thread principal, alors il faut ajouter cette ligne avant le "Application.Run" .
Commentaires des visiteurs :
Ajouter votre commentaire :
Nom :
E-mail :
Commentaire :


Espace Abonné

Mot passe oublié?

Créez un compte maintenant.
Publicité

 
Copyright ©2020. Metacomputer Engineering s.a.r.l . tous les droits réservés