GRUPO DE LLAMADAS DOSxxx (5)
(Semáforos)


DosCloseEventSem

DosCloseEventSem cierra un semáforo de eventos cuando no se va a usar más.

#define INCL_BASE
#include <os2.h>

HEV hev;
APIRET rc; /* Codigo de error */

rc = DosCloseEventSem(hev);

Parámetros

hevEl handle del semáforo de eventos que se quiere cerrar.

Codigos de error

0Sin error
6HANDLE no valido
301Semáforo ocupado


DosCloseMutexSem

DosCloseMutexSem cierra un semáforo mutex cuando ya no se va a usar más.

#define INCL_BASE
#include <os2.h>

HMTX hmtx;
APIRET rc; /* Codigo de error */

rc = DosCloseMutexSem(hmtx);

Parámetros

hmtxEl handle del semáforo mutex que se quiere cerrar.

Codigos de error

0Sin error
6HANDLE no valido
301Semáforo ocupado


DosCreateEventSem

DosCreateEventSem crea un semáforo de tipo evento.

#define INCL_BASE
#include <os2.h>

PSZ pszName;
PHEV phev;
ULONG ulflattr;
BOOL32 f32fState;
APIRET rc; /* Codigo de error */

rc = DosCreateEventSem(pszName, phev, ulflattr, f32fState);

Parámetros

pszNamePuntero a una cadena ASCIIZ con el nombre del semáforo. El nombre tiene que empezar por \SEM32\, con un máximo de 255 caracteres. El nombre no puede coincidir con el de otro semáforo. Por defecto, el semáforo es compartido, salvo que este puntero sea NULL, en cuyo caso se identificará por el handle devuelto en phev, y se podrá especificar si es privado o compartido.
phevUn puntero a una posición de memoria donde OS/2 devolverá un handle al semáforo creado.
ulflattrUna serie de flags que especifican los atributos del semáforo. Si el bit DC_SEM_SHARED está activo, el semáforo será compartido. Solo se tiene en cuenta si el semáforo no tiene nombre, pues todos los semáforos con nombre son compartidos.
f32fStateIndica el estado inicial del semáforo:
Valor Definición
0 (Falso) El valor inicial es 'reset'.
1 (Verdadero) El valor inicial es 'posted'.

Codigos de error

0Sin error
8No hay suficiente memoria
87Parámetro no valido
123Nombre no válido
285Nombre duplicado
290No quedan handles disponibles


DosCreateMutexSem

DosCreateMutexSem crea un semáforo de tipo Mutex.

#define INCL_BASE
#include <os2.h>

PSZ pszName;
PHMTX phmtx;
ULONG ulflattr;
BOOL32 f32fState;
APIRET rc; /* Codigo de error */

rc = DosCreateMutexSem(pszName, phmtx, ulflattr, f32fState);

Parámetros

pszNamePuntero a una cadena ASCIIZ con el nombre del semáforo. El nombre tiene que empezar por \SEM32\, con un máximo de 255 caracteres. El nombre no puede coincidir con el de otro semáforo. Por defecto, el semáforo es compartido, salvo que este puntero sea NULL, en cuyo caso se identificará por el handle devuelto en phmtx, y se podrá especificar si es privado o compartido.
phmtxUn puntero a una posición de memoria donde OS/2 devolverá un handle al semáforo creado.
ulflAttrUna serie de flags que especifican los atributos del semáforo. Si el bit DC_SEM_SHARED está activo, el semáforo será compartido. Solo se tiene en cuenta si el semáforo no tiene nombre, pues todos los semáforos con nombre son compartidos.
f32fStateIndica el estado inicial del semáforo:
Valor Definición
0 (Falso) El valor inicial es 'sin propietario'.
1 (Verdadero) El valor inicial es 'con propietario'.

Codigos de error

0Sin error
8No hay suficiente memoria
87Parámetro no valido
123Nombre no válido
285Nombre duplicado
290No quedan handles disponibles


DosOpenEventSem

DosOpenEventSem abre un semáforo de eventos ya creado.

#define INCL_BASE
#include <os2.h>

PSZ pszName;
PHEV phev;
APIRET rc; /* Codigo de error */

rc = DosOpenEventSem(pszName, phev);

Parámetros

pszNamePuntero a una cadena ASCIIZ con el nombre del semáforo. Si el semáforo es sin nombre, apuntará a NULL, y se identificará con el handle.
phevEn entrada, un puntero al handle del semaforo a abrir, si éste es sin nombre. Si pszName no es NULL, este campo debe contener cero. En salida, un puntero al handle del semáforo que se ha abierto.

Codigos de error

0Sin error
6HANDLE no valido
8No hay suficiente memoria
87Parámetro no valido
123Nombre no válido
187Semáforo no encontrado
291Demasiadas aperturas


DosOpenMutexSem

DosOpenMutexSem abre un semáforo de eventos ya creado.

#define INCL_BASE
#include <os2.h>

PSZ pszName;
PHMTX phmtx;
APIRET rc; /* Codigo de error */

rc = DosOpenMutexSem(pszName, phmtx);

Parámetros

pszNamePuntero a una cadena ASCIIZ con el nombre del semáforo. Si el semáforo es sin nombre, apuntará a NULL, y se identificará con el handle.
phmtxEn entrada, un puntero al handle del semaforo a abrir, si éste es sin nombre. Si pszName no es NULL, este campo debe contener cero. En salida, un puntero al handle del semáforo que se ha abierto.

Codigos de error

0Sin error
6HANDLE no valido
8No hay suficiente memoria
87Parámetro no valido
105El propietario del semáforo ha muerto
123Nombre no válido
187Semáforo no encontrado
291Demasiadas aperturas


DosPostEventSem

DosPostEventSem cambia el estado de un semáforo de evento (post), de modo que todos los threads que estaban bloqueados con DosWaitEventSem seguirán su ejecución. Esta función puede ser usada por cualquier thread del proceso que creó el semáforo. Otros procesos pueden usarla, tras usar previamente DosOpenEventSem.

#define INCL_BASE
#include <os2.h>

HEV hev;
APIRET rc; /* Codigo de error */

rc = DosPostEventSem(hev);

Parámetros

hevEl handle del semáforo de eventos que se quiere cambiar ('postear').

Codigos de error

0Sin error
6HANDLE no valido
298Demasiados post ejecutados
299Ya se encuentra posted


DosQueryEventSem

DosQueryEventSem devuelve el contador de puesta (post count) de un semáforo de eventos. Puede ser usada por cualquier thread del proceso que creó el semáforo, o bien por otros procesos si estos han hecho una llamada a DosOpenEventSem.

#define INCL_BASE
#include <os2.h>

HEV hev;
PULONG pulPostCt;
APIRET rc; /* Codigo de error */

rc = DosQueryEventSem(hev, pulPostCt);

Parámetros

hevEl handle del semáforo de evento a consultar.
pulPostCtUn puntero a una posición de memoria donde OS/2 devolverá el contador. El contenido es el número de peticiones DosPostEventSem que ha recibido ese semáforo.

Codigos de error

0Sin error
6HANDLE no valido
87Parámetro no valido


DosQueryMutexSem

DosQueryMutexSem devuelve información sobre el actual poseedor de un semáforo mutex. Esta función puede ser usada por cualquier thread del proceso que creó el semáforo. Otros procesos pueden usarla, tras usar previamente DosOpenEventSem.

#define INCL_BASE
#include <os2.h>

PPID ppidOwner;
PTID ptidOwner;
PULONG pulCount;
APIRET rc; /* Codigo de error */

rc = DosQueryMutexSem(hmtx, ppidOwner, ptidOwner, pulCount);

Un puntero a una posición de memoria donde OS/2 devolverá el TID (identificador de thread) del actual poseedor del semaforo.

Parámetros

hmtxEl handle del semáforo mutex a consultar.
ppidOwnerUn puntero a una posicion de memoria donde OS/2 devolverá el PID del actual poseedor del semáforo, o de un proceso que terminó sin liberarlo.
ptidOwner
pulCountUn puntero a una posición de memoria donde OS/2 devolverá el número de peticiones del semaforo. Este es el número de llamadas a DosRequestMutexSem menos el número de llamadas a DosReleaseMutexSem que se han hecho al semáforo indicado. Si el semáforo no esta poseido por nadie, este valor será cero.

Codigos de error

0Sin error
6HANDLE no valido
87Parámetro no valido
105El propietario del semáforo ha muerto


DosReleaseMutexSem

DosReleaseMutexSem libera un semáforo pedido con DosRequestMutexSem. Esta función puede ser usada por cualquier thread del proceso que creó el semáforo. Otros procesos pueden usarla, tras usar previamente DosOpenEventSem.

#define INCL_BASE
#include <os2.h>

HMTX hmtx;
APIRET rc; /* Codigo de error */

rc = DosReleaseMutexSem(hmtx);

Parámetros

hmtxEl handle del semáforo a liberar.

Codigos de error

0Sin error
6HANDLE no valido
288No se ha hecho DosRequestMutexSem


DosRequestMutexSem

DosRequestMutexSem pide control sobre un semáforo MUTEX. Si el semáforo ya esta controlado, el thread es dormido hasta que el que el semáforo sea liberado con DosReleaseMutexSem. Esta función puede ser usada por cualquier thread del proceso que creó el semáforo. Otros procesos pueden usarla, tras usar previamente DosOpenEventSem.

#define INCL_BASE
#include <os2.h>

HMTX hmtx;
ULONG ulTimeout;
APIRET rc; /* Codigo de error */

rc = DosRequestMutexSem(hmtx, ulTimeout);

Parámetros

hmtxEl handle del semáforo mutex, obtenido a través de DosCreateMutexSem o de DosOpenMutexSem.
ulTimeoutEl tiempo en milisegundos que debe esperar a que el semáforo sea liberado en caso de estar bloqueado. Este parámetro ayuda a evitar interbloqueos (deathlocks). Hay dos valores especiales: si vale 0 (SEM_INMEDIATE_RETURN), retorna inmediatamente sin bloquear el thread; si vale -1 (SEM_INDEFINITE_WAIT) duerme el thread por tiempo indefinido.

Codigos de error

0Sin error
6HANDLE no valido
95Interrupción
103Demasiados SEM_REQUEST
105El propietario del semáforo ha muerto
640TimeOut (finalizó el tiempo)


DosResetEventSem

DosResetEventSem borra un semáforo de evento, de modo que todos los threads que hagan una petición DosWaitEventSem quedarán bloqueados. Esta función puede ser usada por cualquier thread del proceso que creó el semáforo. Otros procesos pueden usarla, tras usar previamente DosOpenEventSem.

#define INCL_BASE
#include <os2.h>

HEV hev;
PULONG pulPostCt;
APIRET rc; /* Codigo de error */

rc = DosResetEventSem(hev,punPostCt);

Parámetros

hevHandle del semáforo de evento a borrar
pulPostCtUn puntero a una posición de memoria donde OS/2 devolverá el número de veces que el semáforo ha recibido una petición DosPostEventSem.

Codigos de error

0Sin error
6HANDLE no valido
300El semáforo ya está borrado.


DosWaitEventSem

DosWaitEventSem bloquea el thread actual si el semáforo de evento referido está borrado, y lo mantiene así hasta que sea liberado. Esta función puede ser usada por cualquier thread del proceso que creó el semáforo. Otros procesos pueden usarla, tras usar previamente DosOpenEventSem.

#define INCL_BASE
#include <os2.h>

HEV hev;
ULONG ulTimeout;
APIRET rc; /* Codigo de error */

rc = DosWaitEventSem(hev, ulTimeout);

Parámetros

hevHandle al semáforo de evento al que se quiere esperar.
ulTimeoutEl tiempo en milisegundos que debe esperar a que el semáforo sea liberado en caso de estar bloqueado. Este parámetro ayuda a evitar interbloqueos (deathlocks). Hay dos valores especiales: si vale 0 (SEM_INMEDIATE_RETURN), retorna inmediatamente sin bloquear el thread; si vale -1 (SEM_INDEFINITE_WAIT) duerme el thread por tiempo indefinido.

Codigos de error

0Sin error
6HANDLE no valido
8No hay suficiente memoria
95Interrupción
640TimeOut (finalizó el tiempo)

 Indice