Crée ou ouvre un objet Mutex nommé ou non
#include <WinAPIProc.au3>
_WinAPI_CreateMutex ( $sMutex [, $bInitial = True [, $tSecurity = 0]] )
$sMutex | Le nom de l'objet Mutex. La comparaison des noms est sensible à la casse. |
$bInitial | [optionnel] Spécifie si le processus appelant obtient la possession initiale de l'objet Mutex, les valeurs valides sont: True - Le thread appelant obtient la possession initiale de l'objet Mutex (par défaut). False - Le thread appelant n'obtient pas la propriété de l'objet mutex. |
$tSecurity | [optionnel] La structure $tagSECURITY_ATTRIBUTES qui spécifie un descripteur de sécurité pour le nouveau mutex. Si ce paramètre est 0 (par défaut), le mutex obtient un descripteur de sécurité par défaut. |
Succès: | Retourne le handle de l'objet mutex nouvellement créé. |
Échec: | Retourne 0, appelez _WinAPI_GetLastError() pour obtenir des informations supplémentaires sur l'erreur. |
Si le mutex est un mutex nommé et si l'objet existait avant cet appel de fonction, la valeur de retour est le handle de l'objet existant, _WinAPI_GetLastError() retourne ERROR_ALREADY_EXISTS (183), $bInitial est ignoré, et le thread appelant se voit refuser la propriété.
Cependant, si l'appelant a des droits d'accès limités, la fonction échoue avec ERROR_ACCESS_DENIED (5) et l'appelant doit utiliser la fonction _WinAPI_OpenMutex().
Tout processus peut spécifier le handle de l'objet mutex dans un appel à l'une des fonctions wait.
Les fonctions wait, fonctions d'attente d'un objet unique, retourne lorsque l'état de l'objet spécifié est signalé.
Les fonctions d'attente de multiples objets peuvent être invités à retourner lorsque l'un ou tous les objets spécifiés sont signalés.
Quand une fonction d'attente retourne, le thread en attente est libéré pour continuer son exécution.
Deux ou plusieurs processus peuvent appeler _WinAPI_CreateMutex() pour créer le même mutex nommé.
Le premier processus crée réellement le mutex, et les processus ultérieurs, avec des droits d'accès suffisants, ouvrent le handle du mutex existant.
Cela permet de multiples processus d'obtenir des handles du même mutex, tout en soulageant l'utilisateur de la responsabilité de s'assurer que le processus de création est lancé en premier.
Lorsque vous utilisez cette technique, vous devez définir le paramètre $bInitial à False; sinon, il peut être difficile d'être certain quel est le processus qui a la propriété initiale.
Utilisez la fonction _WinAPI_CloseHandle() pour fermer le handle.
Le système ferme le handle automatiquement lorsque le processus se termine.
L'objet mutex est détruit lorsque son dernier handle a été fermé.
_WinAPI_CloseHandle, _WinAPI_OpenMutex
Consultez CreateMutex dans la librairie MSDN.