Lo que pasa con este sistema es que se puede, efectivamente, llamar al
programa desde fuera, y est� permitido..
pero si el programa mismo que se ejecuta se bloquea a s� mismo en modo
exclusivo, no puede ser llamado por nadie m�s hasta que acaba, y adem�s, si
finaliza con error da igual, al acabar el trabajo se desbloquea (en el caso
en que estemos hablando de procesos batch, claro)
He aqu� un microprograma que sirve para probar esto (bueno, ya se que
parece m�s un "programa del viernes", pero cumple su cometido.)
El programa se llama TSTBLQ y est� en una biblioteca el *LIBL
PGM � /* Para probar el funcionamiento de bloqueos del mismo programa */
� � � � � � �ALCOBJ � � OBJ((TSTBLQ *PGM *EXCL)) WAIT(5)
� � � � � � �MONMSG � � MSGID(CPF1002) EXEC(GOTO BLOQUEO)
� � � � � � �SNDPGMMSG �MSG('Acabo de bloquearme') TOPGMQ(*EXT)
� � � � � � �DLYJOB � � DLY(60) /* Hacemos como que estamos haciendo
algo...*/
� � � � � � �SNDPGMMSG �MSG('Bueno, ya he trabajado bastante, y me +
� � � � � � � � � � � � � largo') TOPGMQ(*EXT)
� � � � � � �GOTO FIN
BLOQUEO:
� � � � � � �SNDPGMMSG �MSG('�Ah, pill�n, conque quer�as entrar +
� � � � � � � � � � � � � varias veces, eh?!') TOPGMQ(*EXT)
FIN: � � � � DLCOBJ OBJ((TSTBLQ *PGM *EXCL))
� � ENDPGM
Un saludo
Jesus Busquets
Grespania, S.A.
Please respond to [EMAIL PROTECTED]
Sent by: � � � [EMAIL PROTECTED]
To: � � � �"'[EMAIL PROTECTED]'" <[EMAIL PROTECTED]>
cc:
Subject: � � � �RE: IF ACTIVE .....
Abundando en la soluci�n de alocar/desalocar aqu� tienes un CL que submite
un objeto una sola vez (se debe ejecutar siempre el programa desde aqu�, en
caso contrario puedes tener m�s de una instancia del programa ejecurtandose
simult�neamente)
*************** Beginning of data *************************************
� � � � � � PGM � � � �PARM(&NAMELIB &NAMEPGM)
� � � � � � DCL � � � �VAR(&NAMEPGM) TYPE(*CHAR) LEN(10) /* Name of +
� � � � � � � � � � � � �the program to execute */
� � � � � � DCL � � � �VAR(&NAMELIB) TYPE(*CHAR) LEN(10) /* Name of +
� � � � � � � � � � � � �the library of the program */
� � � � � � DCL � � � �VAR(&LIBPGM) TYPE(*CHAR) LEN(21) /* Name of +
� � � � � � � � � � � � �the library + the program */
� � � � � � CHGVAR � � VAR(&LIBPGM) VALUE(&NAMELIB *TCAT '/' *TCAT +
� � � � � � � � � � � � �&NAMEPGM) /* Concatenate lib + pgm */
� � � � � � ALCOBJ � � OBJ((&NAMELIB/&NAMEPGM *PGM *EXCL)) WAIT(0) +
� � � � � � � � � � � � �/* First of all we try to allocate the +
� � � � � � � � � � � � �program */
� � � � � � MONMSG � � MSGID(CPF1002 CPF0952 CPF0939 CPA0701 +
� � � � � � � � � � � � �CPF1085 CPF0001) EXEC(GOTO +
� � � � � � � � � � � � �CMDLBL(THATSALL)) /* The allocate Fails +
� � � � � � � � � � � � �-> The program is running -> That's all +
� � � � � � � � � � � � �folks */
� � � � � � DLCOBJ � � OBJ((&NAMELIB/&NAMEPGM *PGM *EXCL)) /* The +
� � � � � � � � � � � � �allocate success, so des-allocate */
� � � � � � SBMJOB � � CMD(CALL PGM(&NAMELIB/&NAMEPGM)) +
� � � � � � � � � � � � �JOB(&NAMEPGM) JOBQ(QNECK) LOG(0 30 +
� � � � � � � � � � � � �*NOLIST) LOGCLPGM(*NO) INQMSGRPY(*RQD) +
� � � � � � � � � � � � �MSGQ(*NONE) /* The program is not running +
� � � � � � � � � � � � �and the program is des-allocated, now you +
� � � � � � � � � � � � �can run the program. THE FIRST +
� � � � � � � � � � � � �INSTRUCTION OF THE PROGRAM MUST BE +
� � � � � � � � � � � � �'ALCOBJ MYSELF *PGM *EXCL'*/
� � � � � � MONMSG � � MSGID(CPD0028 CPD0170) EXEC(GOTO +
� � � � � � � � � � � � �CMDLBL(THATSALL)) /* The Program is not +
� � � � � � � � � � � � �in the disk -> That's all folks */
THATSALL: � ENDPGM
****************** End of data ****************************************
�No es necesario desalocar el objeto al salir pues se desaloca el solo.
�Este CL ha funcionado durante bastante tiempo sin ning�n problema.
�Saludos. Tono
-----Original Message-----
From: Juan Ram�n Garcia [mailto:[EMAIL PROTECTED]
Sent: lunes 24 de febrero de 2003 10:11
To: [EMAIL PROTECTED]
Subject: RE: IF ACTIVE .....
Hola, en el siguiente enlace tienes un art�culo sobre este tema
http://www.recursos-as400.com/wrk400/150999/maquinista.shtml
Un saludo.
Juanra
----- Original Message -----
From: j_losada losada <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Saturday, February 22, 2003 2:34 AM
Subject: IF ACTIVE .....
> Buenas noches foro,
>
> tal vez alguno de la vieja escuela (sist. 36) me pueda ayudar en el
AS/400,
> necesito hacer una CL que haga en si lo que en RPG II se controlaba con
un
> IF ACTIVE.
> Es decir, tengo un trabajo (ej.: AAAA) que ha de estar permanente activo,
en
> caso de que falle por alguna causa se ha de arrancar automaticamente con
un
> mandato (ej.: XXXX)
> Esto en RPG II sobre sist. 36 se podia controlar con un procedimiento del
> tipo:
>
> INICIO TAG
> IF ACTIVE AAAA GOTO FIN
> XXXX
> FIN TAG
> GOTO INICIO
>
> Mas o menos,... no se si me explico, pues bien, como lo hariais con una
CL?
>
> Gracias a todos
_____________________________________________________
Forum.HELP400 es un servicio m�s de NEWS/400.
� Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________
Para darte de baja, env�a el mensaje resultante de pulsar
mailto:[EMAIL PROTECTED]
_____________________________________________________
Forum.HELP400 es un servicio m�s de NEWS/400.
� Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________
Para darte de baja, env�a el mensaje resultante de pulsar
mailto:[EMAIL PROTECTED]
_____________________________________________________
Forum.HELP400 es un servicio m�s de NEWS/400.
� Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________
Para darte de baja, env�a el mensaje resultante de pulsar
mailto:[EMAIL PROTECTED]