PDA

Ver la Versión Completa : [PowerCOBOL + WinAPI] Multihilo (Thread) en PowerCOBOL


Kuk
18 de abril de 2019, 21:40
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.


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



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".