Función CreateEventA (synchapi.h)

Crea o abre un objeto de evento con nombre o sin nombre.

Para especificar una máscara de acceso para el objeto, use la función CreateEventEx .

Sintaxis

HANDLE CreateEventA(
  [in, optional] LPSECURITY_ATTRIBUTES lpEventAttributes,
  [in]           BOOL                  bManualReset,
  [in]           BOOL                  bInitialState,
  [in, optional] LPCSTR                lpName
);

Parámetros

[in, optional] lpEventAttributes

Puntero a una estructura de SECURITY_ATTRIBUTES . Si este parámetro es NULL, los procesos secundarios no pueden heredar el identificador.

El miembro lpSecurityDescriptor de la estructura especifica un descriptor de seguridad para el nuevo evento. Si lpEventAttributes es NULL, el evento obtiene un descriptor de seguridad predeterminado. Las ACL del descriptor de seguridad predeterminado para un evento proceden del token principal o de suplantación del creador.

[in] bManualReset

Si este parámetro es TRUE, la función crea un objeto de evento de restablecimiento manual, que requiere el uso de la función ResetEvent para establecer el estado del evento en no asignado. Si este parámetro es FALSE, la función crea un objeto de evento de restablecimiento automático y el sistema restablece automáticamente el estado del evento a sin signo después de que se haya liberado un único subproceso en espera.

[in] bInitialState

Si este parámetro es TRUE, se señala el estado inicial del objeto de evento; de lo contrario, no tiene signo.

[in, optional] lpName

Nombre del objeto de evento. El nombre está limitado a MAX_PATH caracteres. La comparación de nombres distingue mayúsculas de minúsculas.

Si lpName coincide con el nombre de un objeto de evento con nombre existente, esta función solicita el derecho de acceso EVENT_ALL_ACCESS . En este caso, los parámetros bManualReset y bInitialState se omiten porque ya se han establecido mediante el proceso de creación. Si el parámetro lpEventAttributes no es NULL, determina si el identificador se puede heredar, pero se omite su miembro del descriptor de seguridad.

Si lpName es NULL, el objeto de evento se crea sin un nombre.

Si lpName coincide con el nombre de otro tipo de objeto en el mismo espacio de nombres (por ejemplo, un semáforo, una exclusión mutua, un temporizador de espera, un trabajo o un objeto de asignación de archivos), se produce un error en la función y la función GetLastError devuelve ERROR_INVALID_HANDLE. Esto ocurre porque estos objetos comparten el mismo espacio de nombres.

El nombre puede tener un prefijo "Global" o "Local" para crear explícitamente el objeto en el espacio de nombres global o de sesión. El resto del nombre puede contener cualquier carácter excepto el carácter de barra diagonal inversa (\). Para obtener más información, vea Espacios de nombres de objeto kernel. El cambio rápido de usuarios se implementa mediante sesiones de Terminal Services. Los nombres de objeto de kernel deben seguir las directrices descritas para Terminal Services para que las aplicaciones puedan admitir varios usuarios.

El objeto se puede crear en un espacio de nombres privado. Para obtener más información, vea Espacios de nombres de objeto.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es un identificador para el objeto de evento. Si el objeto de evento con nombre existía antes de la llamada a la función, la función devuelve un identificador al objeto existente y GetLastError devuelve ERROR_ALREADY_EXISTS.

Si la función no se realiza correctamente, el valor devuelto es NULL. Para obtener información de error extendida, llame a GetLastError.

Comentarios

El identificador devuelto por CreateEvent tiene el derecho de acceso EVENT_ALL_ACCESS ; se puede usar en cualquier función que requiera un identificador para un objeto de evento, siempre que se haya concedido acceso al autor de la llamada. Si se crea un evento a partir de un servicio o un subproceso que suplanta a un usuario diferente, puede aplicar un descriptor de seguridad al evento al crearlo o cambiar el descriptor de seguridad predeterminado para el proceso de creación cambiando su DACL predeterminada. Para obtener más información, vea Synchronization Object Security and Access Rights.

Cualquier subproceso del proceso de llamada puede especificar el identificador de objeto de evento en una llamada a una de las funciones de espera. Las funciones de espera de objeto único devuelven cuando se señala el estado del objeto especificado. Se pueden indicar a las funciones de espera de varios objetos que devuelvan cuando se señalizan todos los objetos especificados. Cuando se devuelve una función wait, se libera el subproceso en espera para continuar su ejecución.

El parámetro bInitialState especifica el estado inicial del objeto de evento. Use la función SetEvent para establecer el estado de un objeto de evento en señalizado. Use la función ResetEvent para restablecer el estado de un objeto de evento a sin signo.

Cuando se señala el estado de un objeto de evento de restablecimiento manual, permanece señalado hasta que se restablece explícitamente a no asignado por la función ResetEvent . Se puede liberar cualquier número de subprocesos en espera o subprocesos que, posteriormente, inicien operaciones de espera para el objeto de evento especificado, mientras se señala el estado del objeto.

Cuando se señala el estado de un objeto de evento de restablecimiento automático, permanece señalado hasta que se libera un único subproceso en espera; A continuación, el sistema restablece automáticamente el estado a sin signo. Si no hay subprocesos en espera, el objeto del evento sigue teniendo el estado señalizado.

Varios procesos pueden tener identificadores del mismo objeto de evento, lo que permite el uso del objeto para la sincronización entre procesos. Están disponibles los siguientes mecanismos de uso compartido de objetos:

  • Un proceso secundario creado por la función CreateProcess puede heredar un identificador a un objeto de evento si el parámetro lpEventAttributes de la herencia habilitada para CreateEvent .
  • Un proceso puede especificar el identificador de objeto de evento en una llamada a la función DuplicateHandle para crear un identificador duplicado que otro proceso pueda usar.
  • Un proceso puede especificar el nombre de un objeto de evento en una llamada a la función OpenEvent o CreateEvent .
Use la función CloseHandle para cerrar el identificador. El sistema cierra el identificador automáticamente cuando finaliza el proceso. El objeto de evento se destruye cuando se ha cerrado su último identificador.

Ejemplos

Para obtener un ejemplo que usa CreateEvent, vea Usar objetos de evento.

Nota

El encabezado synchapi.h define CreateEvent como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado synchapi.h (incluye Windows.h en Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
Archivo DLL Kernel32.dll

Vea también

CloseHandle

CreateEventEx

CreateProcess

DuplicateHandle

Objetos de evento

Nombres de objeto

OpenEvent

ResetEvent

SECURITY_ATTRIBUTES

SetEvent

Funciones de sincronización