QMutexLa classe QMutex fournit un acc�s � la s�rialisation entre threads. Plus d'informations... #include <QMutex> Voir la position dans l'arbre des classes. Description d�taill�eLa classe QMutex fournit un acc�s � la s�rialisation entre threads. Le but de QMutex est de prot�ger un objet, une structure de donn�es ou une section de code de sorte que qu'un seul thread puisse y acc�der � un moment donn� (ceci est similaire au mot-cl� synchronized en Java). Il est g�n�ralement pr�f�rable d'utiliser un mutex avec un QMutexLocker il est ainsi plus facile d'assurer la coh�rence du verrouillage et d�verrouillage. Par exemple, supposons qu'il existe une m�thode qui renvoie un message � l'utilisateur sur deux lignes : int number = 6; void method1() { number *= 5; number /= 4; } void method2() { number *= 3; number /= 2; } Si ces deux m�thodes sont appel�es successivement, les �v�nements suivants se produisent : // method1() number *= 5; // number est maintenant 30 number /= 4; // number est maintenant 7 // method2() number *= 3; // number est maintenant 21 number /= 2; // number est maintenant 10 Si ces deux m�thodes sont appel�es simultan�ment � partir de deux threads alors cela peut entra�ner la s�quence suivante : // Thread 1 appelle method1() number *= 5; // number est maintenant 30 // Thread 2 appelle method2(). // Tr�s probablement Thread 1 a �t� mis en sommeil par le syst�me d'exploitation // pour mettre le Thread 2 en route. number *= 3; // number est maintenant 90 number /= 2; // number est maintenant 45 // Thread 1 finit son ex�cution. number /= 4; // number est maintenant 11, au lieu de 10 En ajoutant un mutex, nous devrions obtenir le r�sultat souhait� : QMutex mutex; int number = 6; void method1() { mutex.lock(); number *= 5; number /= 4; mutex.unlock(); } void method2() { mutex.lock(); number *= 3; number /= 2; mutex.unlock(); } Ici, un seul thread peut modifier number � un moment donn� ce qui donne un r�sultat correct. Bien s�r, cet exemple est trivial, mais la m�thode est applicable � chaque fois que l'on a besoin d'imposer une s�quence particuli�re. Quand vous appelez lock() dans un thread, les autres threads qui essayent d'appeler lock() sur le m�me mutex seront bloqu�s jusqu'� ce que le thread qui a le verrou appelle unlock(). Une alternative non bloquante de lock() est tryLock(). Voir aussi QMutexLocker, QReadWriteLock, QSemaphore et QWaitCondition. Typeenum QMutex::RecursionMode
Voir aussi QMutex(). Fonctions membresQMutex::QMutex ( RecursionMode mode = NonRecursive )Construit un nouveau mutex. Le mutex est cr�� dans l'�tat d�verrouill�. Si le mode est QMutex::Recursive, un thread peut verrouiller le m�me mutex plusieurs fois et le mutex ne sera d�verrouill� que lorsque le nombre d'appel � unlock() sera le m�me que celui d'appel � lock(). La valeur par d�faut est QMutex::NonRecursive. Voir aussi lock() et unlock(). QMutex::~QMutex ()D�truit le mutex. Attention : La destruction d'un mutex verrouill� peut engendrer un comportement inattendu de votre programme. void QMutex::lock ()Verrouille le mutex. Si un autre thread l'a d�j� verrouill� alors cet appel sera bloquant jusqu'� ce que l'autre thread le d�verrouille. Il est possible d'appeler plusieurs fois cette fonction sur le m�me mutex si le mutex est mutex r�cursif. Si le mutex n'est pas r�cursif, l'appel provoquera un verrou mortel (dead-lock). Voir aussi unlock(). bool QMutex::tryLock ()Tente de verrouiller le mutex. Si le verrouillage est obtenu, cette fonction retournera true. Si un autre thread a verrouill� le mutex, cette fonction retournera imm�diatement false. Si le verrouillage est obtenu, le mutex devra �tre d�verrouill� avec unlock() avant qu'un autre thread ne puisse le verrouiller. Il est possible d'appeler plusieurs fois cette fonction depuis le m�me thread sur un m�me mutex si celui-ci est r�cursif. Sinon la fonction retournera false en cas de tentative de verrouillage r�cursif du mutex. Voir aussi lock() et unlock(). bool QMutex::tryLock ( int timeout )Ceci est une fonction membre surcharg�e. Tente de verrouiller le mutex. La fonction renvoie true en cas de succ�s du verrouillage, false sinon. Si un autre thread a d�j� verrouill� le mutex, la fonction attendra la disponibilit� du mutex pendant au plus timeout millisecondes. Note : Passer un nombre timeout n�gatif revient � appeler la fonction lock(), ce qui revient � dire que la fonction trylock() attendra ind�finiment que le mutex puisse �tre verrouill�. Si le verrouillage est obtenu, le mutex devra �tre d�verrouill� avec unlock() avant qu'un autre thread ne puisse le verrouiller � nouveau. Il est possible d'appeler plusieurs fois cette fonction depuis le m�me thread sur un m�me mutex si celui-ci est r�cursif. Si le mutex n'est pas r�cursif, la fonction retournera false si elle tente de le verrouiller r�cursivement. Voir aussi lock() et unlock(). void QMutex::unlock ()Si vous essayez de d�verrouiller un mutex non pr�alablement verrouill�, votre programme adoptera un comportement inattendu. Voir aussi lock(). RemerciementsMerci � Mikael Sans pour la traduction et � Jonathan Courtois ainsi qu'� Philippe Beaucart pour leur relecture ! |
Cette page est une traduction d'une page de la documentation de Qt, �crite par Nokia Corporation and/or its subsidiary(-ies). Les �ventuels probl�mes r�sultant d'une mauvaise traduction ne sont pas imputables � Nokia. | Qt 4.7 | |
Copyright © 2025 Developpez LLC. Tous droits r�serv�s Developpez LLC. Aucune reproduction, m�me partielle, ne peut �tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'� 3 ans de prison et jusqu'� 300 000 E de dommages et int�r�ts. Cette page est d�pos�e � la SACD. | ||
Vous avez d�nich� une erreur ? Un bug ? Une redirection cass�e ? Ou tout autre probl�me, quel qu'il soit ? Ou bien vous d�sirez participer � ce projet de traduction ? N'h�sitez pas � nous contacter ou par MP ! |