Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   Cocina PowerCOBOL (https://www.cobolforo.es/forumdisplay.php?f=24)
-   -   [PowerCOBOL + WinAPI] Multihilo (Thread) en PowerCOBOL (https://www.cobolforo.es/showthread.php?t=1875)

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:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  RESP                       PIC S9(9) COMP-5.
  5.  01  lpStartAddress             PROCEDURE-POINTER.
  6.  01  R-lpStartAddress REDEFINES lpStartAddress PIC 9(9) COMP-5.
  7.  01  lpParameter                PIC 9(9) COMP-5.
  8.  01  lpThreadId                 PIC 9(9) COMP-5 VALUE 0.
  9.  
  10.  01  CAMPO       PIC X(20) IS EXTERNAL.
  11.  PROCEDURE       DIVISION.
  12.      
  13.      DISPLAY "Vamos allá..."
  14.      
  15.      MOVE "Hola desde el Form!" TO CAMPO
  16.      
  17.      MOVE POW-FALSE TO "Enabled" OF CmCommand1
  18.      
  19.      SET lpStartAddress TO ENTRY "RUTINA@0"
  20.          
  21.      *> Kernel32.lib
  22.      CALL "CreateThread" WITH STDCALL USING BY VALUE 0
  23.                                             BY VALUE 0
  24.                                             BY VALUE R-lpStartAddress
  25.                                             BY REFERENCE lpParameter
  26.                                             BY VALUE 0
  27.                                             BY REFERENCE lpThreadId
  28.                                             RETURNING RESP
  29.                                            
  30.      IF  RESP = ZEROS
  31.          CALL "GetLastError" WITH STDCALL RETURNING RESP
  32.          
  33.          DISPLAY "ERROR CreateThread, RC: " RESP            
  34.          
  35.          EXIT PROGRAM
  36.      END-IF

Código COBOL:
  1.  IDENTIFICATION DIVISION.
  2.  PROGRAM-ID. "RUTINA".
  3.  
  4.  DATA DIVISION.
  5.  WORKING-STORAGE SECTION.
  6.  01  CAMPO       PIC X(20) IS EXTERNAL.
  7.  PROCEDURE DIVISION WITH STDCALL LINKAGE.
  8.  
  9.      PERFORM 10 TIMES
  10.          DISPLAY "¡¡¡Este es un nuevo Thread!!! Valor recibido: " CAMPO
  11.      
  12.          CALL "Sleep" WITH STDCALL USING BY VALUE 1000
  13.      END-PERFORM
  14.      
  15.      DISPLAY "ADIÓS"
  16.      
  17.      CALL "Sleep" WITH STDCALL USING BY VALUE 1000
  18.      
  19.      GOBACK
  20.      .
  21.  
  22.  END PROGRAM "RUTINA".


La franja horaria es GMT +2. Ahora son las 13:03.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.