PulseEvent, fonction (winbase.h)
Définit l’objet d’événement spécifié à l’état signalé, puis le rétablit à l’état non signé après avoir libéré le nombre approprié de threads en attente.
Syntaxe
BOOL PulseEvent(
[in] HANDLE hEvent
);
Paramètres
[in] hEvent
Handle de l’objet d’événement. La fonction CreateEvent ou OpenEvent retourne ce handle.
Le handle doit avoir le droit d’accès EVENT_MODIFY_STATE. Pour plus d’informations, consultez Synchronisation des droits d’accès et de sécurité des objets.
Valeur retournée
Si la fonction réussit, la valeur de retour est différente de zéro.
Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.
Remarques
Un thread en attente sur un objet de synchronisation peut être momentanément supprimé de l’état d’attente par un APC en mode noyau, puis retourné à l’état d’attente une fois l’APC terminé. Si l’appel à PulseEvent se produit pendant le temps où le thread a été supprimé de l’état d’attente, le thread ne sera pas libéré, car PulseEvent libère uniquement les threads en attente au moment où il est appelé. Par conséquent, PulseEvent n’est pas fiable et ne doit pas être utilisé par les nouvelles applications. Utilisez plutôt des variables de condition.
Pour un objet d’événement de réinitialisation manuelle, tous les threads en attente qui peuvent être libérés immédiatement sont libérés. La fonction réinitialise ensuite l’état de l’objet d’événement à non signé et retourne.
Pour un objet d’événement de réinitialisation automatique, la fonction réinitialise l’état sur non signé et retourne après avoir libéré un seul thread en attente, même si plusieurs threads sont en attente.
Si aucun thread n’est en attente ou si aucun thread ne peut être libéré immédiatement, PulseEvent définit simplement l’état de l’objet d’événement sur non signé et retourne.
Notez que pour qu’un thread utilisant les fonctions d’attente à plusieurs objets attende que tous les objets spécifiés soient signalés, PulseEvent peut définir l’état de l’objet d’événement sur signalé et le réinitialiser sur non signé sans provoquer le retour de la fonction wait. Cela se produit si tous les objets spécifiés ne sont pas signalés simultanément.
Soyez extrêmement prudent lorsque vous utilisez SignalObjectAndWait et PulseEvent avec Windows 7, car l’utilisation de ces API entre plusieurs threads peut entraîner un blocage d’une application. Les threads signalés par SignalObjectAndWait appellent PulseEvent pour signaler l’objet en attente de l’appel SignalObjectAndWait . Dans certaines circonstances, l’appelant de SignalObjectAndWait ne peut pas recevoir l’état du signal de l’objet en attente dans le temps, ce qui provoque un blocage.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows XP [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | winbase.h (inclure Windows.h) |
Bibliothèque | Kernel32.lib |
DLL | Kernel32.dll |