Suspension et reprise des threads

Guide du développeur .NET Framework 
Suspension et reprise des threads 

Les façons les plus courantes de synchroniser les activités de threads consistent à bloquer et à diffuser des chemins ou à verrouiller des objets ou des régions de code. Pour plus d'informations sur ces verrouillage et blocage des mécanismes, consultez Vue d'ensemble des primitives de synchronisation.

Vous pouvez également avoir des threads en veille. Lorsque les threads sont bloqués ou en veille, vous pouvez utiliser un ThreadInterruptedException pour interrompre la mise en attente.

Méthode Thread.Sleep

L'appel de la méthode System.Threading.Thread.Sleep entraîne le blocage immédiat du thread en cours pendant le temps, en millisecondes, que vous passez à System.Threading.Thread.Sleep, cédant le reste de sa tranche de temps à un autre thread. Un thread ne peut pas appeler System.Threading.Thread.Sleep sur un autre thread.

Un appel System.Threading.Thread.Sleep avec System.Threading.Timeout.Infinite entraîne la mise en veille d'un thread jusqu'à ce qu'elle soit interrompue par un autre thread qui appelle System.Threading.Thread.Interrupt ou jusqu'à ce qu'elle soit terminée par System.Threading.Thread.Abort.

Interruption de threads

Vous pouvez interrompre un thread en attente en faisant appel à System.Threading.Thread.Interrupt sur le thread bloqué pour lever une ThreadInterruptedException qui sort le thread de l'appel bloquant. Le thread doit intercepter ThreadInterruptedException et faire tout ce qu'il faut pour continuer à travailler. Si le thread ignore l'exception, le runtime intercepte l'exception et arrête le thread.

RemarqueRemarque

Si le thread cible n'est pas bloqué lors de l'appel à System.Threading.Thread.Interrupt, l'interruption n'a lieu qu'au moment du blocage. Si le thread ne se bloque jamais, il peut poursuivre jusqu'à la fin sans être jamais interrompu.

Si une attente est une attente managée, System.Threading.Thread.Interrupt et System.Threading.Thread.Abort réactivent le thread immédiatement. Dans le cas d'une attente non managée (par exemple, un appel de plate-forme à la fonction WaitForSingleObject Win32), ni System.Threading.Thread.Interrupt, ni System.Threading.Thread.Abort ne peuvent prendre le contrôle du thread avant qu'il ne retourne vers ou appelle dans du code managé. Dans du code managé, le comportement est comme suit :

  • System.Threading.Thread.Interrupt libère un thread de l'attente dans laquelle il peut se trouver et entraîne la levée d'une exception ThreadInterruptedException dans le thread de destination.

  • System.Threading.Thread.Abort est semblable à System.Threading.Thread.Interrupt, excepté qu'il entraîne la levée d'un ThreadAbortException sur le thread. Pour plus d'informations, consultez Destruction de threads.

Suspension et reprise (obsolète)

RemarqueImportant

Dans le .NET Framework version 2.0, les méthodes System.Threading.Thread.Suspend et System.Threading.Thread.Resume sont marquées obsolètes et seront supprimées dans une version ultérieure.

Vous pouvez également suspendre un thread en appelant System.Threading.Thread.Suspend. Lorsqu'un thread appelle System.Threading.Thread.Suspend sur lui-même, l'appel bloque jusqu'à ce que le thread soit repris par un autre thread. Lorsqu'un thread appelle System.Threading.Thread.Suspend sur un autre thread, l'appel est un appel sans blocage qui entraîne la suspension de l'autre thread. L'appel à System.Threading.Thread.Resume libère un autre thread de l'état de veille et entraîne la reprise de l'exécution par le thread, quel que soit le nombre d'appels dont System.Threading.Thread.Suspend a fait l'objet. Par exemple, si vous appelez System.Threading.Thread.Suspend cinq fois de suite puis appelez System.Threading.Thread.Resume, le thread reprend son exécution immédiatement à la suite de l'appel à System.Threading.Thread.Resume.

Contrairement à System.Threading.Thread.Sleep, System.Threading.Thread.Suspend n'entraîne pas l'arrêt immédiat de l'exécution par un thread. Le Common Language Runtime doit attendre que le thread atteigne un point sans risque avant de suspendre le thread. Un thread ne peut pas être suspendu s'il n'a pas été démarré ou arrêté. Pour obtenir plus d'informations sur les points sans risque, consultez Thread.Suspend, Garbage Collection et les points sans risque.

RemarqueImportant

Les méthodes System.Threading.Thread.Suspend et System.Threading.Thread.Resume ne sont généralement d'aucune utilité pour des applications et ne doivent pas être confondues avec les mécanismes de synchronisation. Comme System.Threading.Thread.Suspend et System.Threading.Thread.Resume ne reposent pas sur la coopération du thread en cours de contrôle, ces deux méthodes sont très peu discrètes et peuvent générer de graves problèmes d'application comme les blocages (par exemple, si vous suspendez un thread qui contient une ressource dont un autre thread aura besoin).

Certaines applications n'ont pas besoin de contrôler la priorité des threads pour optimiser les performances. Pour ce faire, vous devez utiliser la propriété Priority plutôt que System.Threading.Thread.Suspend.

Voir aussi


Ces informations proviennent du site de http://msdn2.microsoft.com
Source de cette page : http://msdn2.microsoft.com/fr-fr/library/tttdef8x(VS.80).aspx

Réseaux sociaux

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.

 

Nuage de mots clés

7 mots clés dont 0 définis manuellement (plus d'information...).

Avertissement

Cette page ne possède pas encore de mots clés manuels, ceci est donc un exemple automatique (les niveaux de pertinence sont fictifs, mais les liens sont valables). Pour tester le nuage avec une page qui contient des mots définis manuellement, vous pouvez cliquer ici.

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.

 

Astuce pour imprimer les couleurs des cellules de tableaux : http://www.gaudry.be/ast-rf-450.html
Aucun commentaire pour cette page

© Ce document issu de l′infobrol est enregistré sous le certificat Cyber PrInterDeposit Digital Numbertection. Enregistrement IDDN n° 5329-7019
Document créé le 08/11/06 01:34, dernière modification le Vendredi 17 Juin 2011, 12:11
Source du document imprimé : http://www.gaudry.be/dotnet-rf-tttdef8x(VS.80).html Document affiché 1 fois ce mois de Juin.
St.Gaudry©07.01.02
Outils (masquer)
||
Recherche (afficher)
Recherche :

Utilisateur (masquer)
Navigation (masquer)
Apparence (afficher)
Stats (afficher)
15832 documents
452 astuces.
549 niouzes.
3099 definitions.
447 membres.
8115 messages.

Document genere en :
0,52 seconde

Mises à jour :
Mises à jour du site
Citation (masquer)
Mieux vaut étudier que jeûner tout un jour et veiller toute une nuit pour méditer en vain.

Confucius
 
l'infobrol
Nous sommes le Vendredi 01 Juin 2012, 05:49, toutes les heures sont au format GMT+1.00 Heure, heure d'été (+1)