| Kuk |
18 de abril de 2019 21:40 |
Multihilo (Thread) en PowerCOBOL
1 Archivos Adjunto(s)
Puro Fujitsu COBOL.
El código mágico: (dejo el proyecto entero en adjuntos)
IMPORTANTE: si haces DISPLAY, tienes que hacer el primero en el Thread el Form, luego haces el resto en el nuevo Thread.
Código COBOL:
ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 RESP PIC S9(9) COMP-5. 01 lpStartAddress PROCEDURE-POINTER. 01 R-lpStartAddress REDEFINES lpStartAddress PIC 9(9) COMP-5. 01 lpParameter PIC 9(9) COMP-5. 01 lpThreadId PIC 9(9) COMP-5 VALUE 0. 01 CAMPO PIC X(20) IS EXTERNAL. PROCEDURE DIVISION. DISPLAY "Vamos allá..." MOVE "Hola desde el Form!" TO CAMPO MOVE POW-FALSE TO "Enabled" OF CmCommand1 SET lpStartAddress TO ENTRY "RUTINA@0" *> Kernel32.lib CALL "CreateThread" WITH STDCALL USING BY VALUE 0 BY VALUE 0 BY VALUE R-lpStartAddress BY REFERENCE lpParameter BY VALUE 0 BY REFERENCE lpThreadId RETURNING RESP IF RESP = ZEROS CALL "GetLastError" WITH STDCALL RETURNING RESP DISPLAY "ERROR CreateThread, RC: " RESP EXIT PROGRAM END-IF
Código COBOL:
IDENTIFICATION DIVISION. PROGRAM-ID. "RUTINA". DATA DIVISION. WORKING-STORAGE SECTION. 01 CAMPO PIC X(20) IS EXTERNAL. PROCEDURE DIVISION WITH STDCALL LINKAGE. PERFORM 10 TIMES DISPLAY "¡¡¡Este es un nuevo Thread!!! Valor recibido: " CAMPO CALL "Sleep" WITH STDCALL USING BY VALUE 1000 END-PERFORM DISPLAY "ADIÓS" CALL "Sleep" WITH STDCALL USING BY VALUE 1000 GOBACK . END PROGRAM "RUTINA".
|