Gracias Rui Pinto (Rapinto)
COBOL Foro
Foro dedicado a COBOL, a la Programación y a la Informática.
Retroceder   COBOL Foro > IDE-s y compiladores COBOL > Fujitsu COBOL > PowerCOBOL (ActiveX)
PowerCOBOL (ActiveX) Versiones del IDE basadas en ActiveX
Noticias y Avisos
Respuesta
 
Herramientas

  #11
Antiguo 6 de abril de 2019, 23:54
IDENTIFICATION DIVISION
Kuk
Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
Forero desde (Registrado)diciembre 2014
España
UbicaciónMadrid
Edad34 años
Última Actividad26.05.2019 22:17
PROCEDURE DIVISION
PostsPosts: 1.380
Ha dicho GraciasEnviado: 302
Ha recibido agradecimientosRecibido: 522
Mejores respuestasSoluiones: 85
ReputaciónReputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado

Nitzer, de nada hombre, para eso estamos

En cuanto a lo de los hilos, es perfectamente posible. Había un ejemplo de Rapinto por ahí en el foro.

En todo caso, la mecánica sería de crear un Thread vía WinAPI, declarar un PROCEDURE-POINTER, hacerle un

Código COBOL:
  1.      SET MI-PROCEDURE-POINTER TO ENTRY "NOMBRE_PROCEDURE"

Y pasar MI-PROCEDURE-POINTER redefinido en PIC S9(9) COMP-5 al Thread creado.

Ando mal de tiempo, pero intento hacer un ejemplo mañana

Aunque lo más fácil es usar CmTimer-s, porque cada uno crea un hilo detrás. Es decir, poner un CmTimer en el Form, poner en su evento el código que queramos, y lo primero lo que debemos hacer es parar el timer dentro de ese código. Y para invocarlo, simplemente activar el Timer.


NORMAS DEL FORO - obligatorias de conocer para TODOS.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale Pinchando en su Nick:

Kuk está en línea   Responder Con Cita
  #12
Antiguo 16 de abril de 2019, 15:50
IDENTIFICATION DIVISION
Nitzer
Guru de COBOL
ENVIRONMENT DIVISION
Avatar de Nitzer
DATA DIVISION
Forero desde (Registrado)noviembre 2015
España
UbicaciónAlmeria
Edad53 años
Última Actividad16.05.2019 15:20
PROCEDURE DIVISION
PostsPosts: 70
Ha dicho GraciasEnviado: 32
Ha recibido agradecimientosRecibido: 37
Mejores respuestasSoluiones: 3
ReputaciónReputación: 7
Nitzer is on a distinguished road Nitzer is on a distinguished road Nitzer is on a distinguished road Nitzer is on a distinguished road
Predeterminado

Kuk, sin prisas, si pasas un ejemplo, te estaré eternamente agradecido

Como sabes yo siempre utilizo OPENFORM, es decir que desde el menu, cualquier usuario puede tener todas las ventanas que quiera abiertas, obviamente de programas distintos, pero claro, cuando lanzo una consulta que tarda deja todo el programa "no responde"

Gracias como siempre por todo.
Nitzer no ha iniciado sesión   Responder Con Cita
  #13
Antiguo 17 de abril de 2019, 20:59
IDENTIFICATION DIVISION
Kuk
Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
Forero desde (Registrado)diciembre 2014
España
UbicaciónMadrid
Edad34 años
Última Actividad26.05.2019 22:17
PROCEDURE DIVISION
PostsPosts: 1.380
Ha dicho GraciasEnviado: 302
Ha recibido agradecimientosRecibido: 522
Mejores respuestasSoluiones: 85
ReputaciónReputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado

Nitzer, estoy en ello, ¡lo prometido es deuda!

Lo que pasa es que lo estoy haciendo desde 0 porque no encontré el ejemplo del que hablaba y no tengo tiempo ni para estornudar...

Sólo para enseñarte mis avances, de momento no funciona bien:

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  RESP                       PIC S9(9) COMP-5.
  5.  01  SECURITY-DESCRIPTOR.
  6.      05  Revision               PIC X(1).
  7.      05  Sbz1                   PIC X(1).
  8.      05  sControl               PIC S9(4) COMP-5. *> SECURITY_DESCRIPTOR_CONTROL
  9.      05  sOwner                 PIC S9(9) COMP-5.
  10.      05  sGroup                 PIC S9(9) COMP-5.
  11.      05  Sacl                   PIC S9(9) COMP-5.
  12.      05  Dacl                   PIC S9(9) COMP-5.
  13.  
  14.  01  lpdwRevision               PIC S9(9) COMP-5.
  15.  
  16.  01  SECURITY-ATTRIBUTES.
  17.      05  nLength                PIC S9(9) COMP-5. *> The size, in bytes, of this structure
  18.      05  lpSecurityDescriptor   POINTER. *> A pointer to a SECURITY_DESCRIPTOR structure    
  19.      05  bInheritHandle         PIC 9(2) COMP-5.  *> A Boolean value that specifies whether the returned handle is inherited when a new process is created.
  20.  
  21.  01  dwStackSize                PIC 9(9) COMP-5. *> The initial size of the stack, in bytes. The system rounds this value to the nearest page. If this parameter is zero, the new thread uses the default size for the executable.
  22.  01  lpStartAddress             PROCEDURE-POINTER.
  23.  01  R-lpStartAddress REDEFINES lpStartAddress PIC 9(9) COMP-5.
  24.  
  25.  01  lpParameter                PIC 9(9) COMP-5.
  26.  01  dwCreationFlags            PIC 9(9) COMP-5. *> if 0 - The thread runs immediately after creation.
  27.  01  lpThreadId                 PIC 9(9) COMP-5. *> A pointer to a variable that receives the thread identifier.
  28.  PROCEDURE       DIVISION.
  29.      
  30.      MOVE POW-FALSE TO "Enabled" OF CmCommand1
  31.    
  32.      *>Advapi32.lib
  33. *    CALL "GetSecurityDescriptorControl" WITH STDCALL USING BY REFERENCE SECURITY-DESCRIPTOR
  34. *                                                           BY REFERENCE sControl
  35. *                                                           BY REFERENCE lpdwRevision
  36. *                                                           RETURNING RESP
  37.      
  38.      CALL "InitializeSecurityDescriptor" WITH STDCALL USING BY REFERENCE SECURITY-DESCRIPTOR
  39.                                                             BY VALUE 1
  40.                                                             RETURNING RESP
  41.      
  42.      IF  RESP = ZEROS
  43.          CALL "GetLastError" WITH STDCALL RETURNING RESP
  44.          
  45.          DISPLAY "ERROR GetSecurityDescriptorControl, RC: " RESP            
  46.          
  47.          EXIT PROGRAM
  48.      END-IF
  49.      
  50.      MOVE LENGTH OF SECURITY-ATTRIBUTES TO nLength
  51.      
  52.      SET lpSecurityDescriptor TO ADDRESS OF SECURITY-DESCRIPTOR
  53.      
  54.      MOVE H"00" TO bInheritHandle
  55.      MOVE 0     TO dwStackSize
  56.      
  57.      SET lpStartAddress TO ENTRY "RUTINA@0"
  58.      
  59.      MOVE 0 TO lpParameter
  60.    
  61.      *> Kernel32.lib
  62.      CALL "CreateThread" WITH STDCALL USING BY REFERENCE SECURITY-ATTRIBUTES
  63.                                             BY VALUE dwStackSize
  64.                                             BY VALUE R-lpStartAddress
  65.                                             BY REFERENCE lpParameter
  66.                                             BY VALUE dwCreationFlags
  67.                                             BY REFERENCE lpThreadId
  68.                                             RETURNING RESP
  69.                                            
  70.      IF  RESP = ZEROS
  71.          CALL "GetLastError" WITH STDCALL RETURNING RESP
  72.          
  73.          DISPLAY "ERROR CreateThread, RC: " RESP            
  74.          
  75.          EXIT PROGRAM
  76.      END-IF
  77.      
  78.      PERFORM 10 TIMES
  79.          INVOKE CmList1 "AddString" USING "¡Este es el Thread del Form!"
  80.      
  81.          CALL "Sleep" WITH STDCALL USING BY VALUE 1000
  82.      END-PERFORM                            


---------- Post añadido : 21:59 ---------- Post anterior : 22:42 ----------

Nitzer, malas noticias. Es posible hacerlo en COBOL, pero no en Fujitsu, porque el último no trabaja con parámetros BY VALUE. Es decir, necesitaríamos algo como esto:

Código COBOL:
  1.  IDENTIFICATION DIVISION.
  2.  PROGRAM-ID. "RUTINA".
  3.  
  4.  DATA DIVISION.
  5.  LINKAGE SECTION.
  6.  01  P-THREAD            POINTER.
  7.  PROCEDURE DIVISION WITH STDCALL LINKAGE USING BY VALUE P-THREAD.
  8.  

Y parece ser que la función que pasamos a la hora de crear el nuevo Thread lo necesita para poder gestionarlo:

Código CPP:
  1. DWORD WINAPI mythread(LPVOID lpParameter){

Así que, lo que se podría intentar es pasar por una pasarela en C (crear une DLL intermediaria). Pero para probar esto necesito aún más tiempo. No sé cuándo lo voy a poder hacer.

Así que de momento te propongo que pruebes la otra solución de usar Timers como funciones en un Thread separado, a mi me ha funcionado de maravilla.


NORMAS DEL FORO - obligatorias de conocer para TODOS.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale Pinchando en su Nick:

Kuk está en línea   Responder Con Cita
Ha dicho Gracias : 1
Nitzer (17 de abril de 2019)
  #14
Antiguo 17 de abril de 2019, 21:13
IDENTIFICATION DIVISION
Nitzer
Guru de COBOL
ENVIRONMENT DIVISION
Avatar de Nitzer
DATA DIVISION
Forero desde (Registrado)noviembre 2015
España
UbicaciónAlmeria
Edad53 años
Última Actividad16.05.2019 15:20
PROCEDURE DIVISION
PostsPosts: 70
Ha dicho GraciasEnviado: 32
Ha recibido agradecimientosRecibido: 37
Mejores respuestasSoluiones: 3
ReputaciónReputación: 7
Nitzer is on a distinguished road Nitzer is on a distinguished road Nitzer is on a distinguished road Nitzer is on a distinguished road
Predeterminado

Kuk, tranquilo, no quiero quitarte mas tiempo )

Eternamente agradecido por el trabajo que haces por todos nosotros.

NO es algo que me quite la vida.

MIs compañeros ya están con .NET C# a tope y poco a poco iré programando menos yo y mas ellos.

Me voy a dedicar mas a pensar (análisis), la empresa no para de crecer y no me queda otra.
Nitzer no ha iniciado sesión   Responder Con Cita
  #15
Antiguo 18 de abril de 2019, 20:40
IDENTIFICATION DIVISION
Kuk
Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
Forero desde (Registrado)diciembre 2014
España
UbicaciónMadrid
Edad34 años
Última Actividad26.05.2019 22:17
PROCEDURE DIVISION
PostsPosts: 1.380
Ha dicho GraciasEnviado: 302
Ha recibido agradecimientosRecibido: 522
Mejores respuestasSoluiones: 85
ReputaciónReputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado

Nitzer, ¡¡¡¡¡¡¡ Lo conseguí !!!!!!!!! Y sin pasarelas ni ostias. 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".
Archivos Adjuntos
Tipo de Archivo: zip THREAD.zip (33,7 KB, 5 descargas)


NORMAS DEL FORO - obligatorias de conocer para TODOS.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale Pinchando en su Nick:

Kuk está en línea   Responder Con Cita
Han dicho Gracias: 2
Breew (19 de abril de 2019), Tigre (23 de abril de 2019)
  #16
Antiguo 19 de abril de 2019, 10:20
IDENTIFICATION DIVISION
Nitzer
Guru de COBOL
ENVIRONMENT DIVISION
Avatar de Nitzer
DATA DIVISION
Forero desde (Registrado)noviembre 2015
España
UbicaciónAlmeria
Edad53 años
Última Actividad16.05.2019 15:20
PROCEDURE DIVISION
PostsPosts: 70
Ha dicho GraciasEnviado: 32
Ha recibido agradecimientosRecibido: 37
Mejores respuestasSoluiones: 3
ReputaciónReputación: 7
Nitzer is on a distinguished road Nitzer is on a distinguished road Nitzer is on a distinguished road Nitzer is on a distinguished road
Predeterminado



Maravilloso, voy a intentar comprender el código y probarlo.
No hay palabras para semejante trabajo )))
Nitzer no ha iniciado sesión   Responder Con Cita
Ha dicho Gracias : 1
Kuk (19 de abril de 2019)
  #17
Antiguo 21 de abril de 2019, 15:01
IDENTIFICATION DIVISION
Kuk
Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
Forero desde (Registrado)diciembre 2014
España
UbicaciónMadrid
Edad34 años
Última Actividad26.05.2019 22:17
PROCEDURE DIVISION
PostsPosts: 1.380
Ha dicho GraciasEnviado: 302
Ha recibido agradecimientosRecibido: 522
Mejores respuestasSoluiones: 85
ReputaciónReputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado

Nitzer, matennos al corriente, lógicamente lo he probado pero siempre se te puede escapar algo.

Además, me parece un tema interesante, si el código te parece comprensible o no.


P.D. Sinceramente, nuestro foro me parece el más rico en código "oro" del mundo entero. Al menos de los que yo conozco, incluyendo los que están en inglés.
Quiero decir, tenemos ejemplos que no he visto nunca en ningún otro sitio.

---------- Post añadido : 16:01 ---------- Post anterior : 21:40 ----------

Por si a alguien les interesa cómo hacerlo vía Timer: [Componente] ctList de Dbi Tech - Problema con el Font... - COBOL Foro


NORMAS DEL FORO - obligatorias de conocer para TODOS.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale Pinchando en su Nick:

Kuk está en línea   Responder Con Cita
Han dicho Gracias: 2
Nitzer (21 de abril de 2019), Tigre (23 de abril de 2019)
  #18
Antiguo 4 de mayo de 2019, 13:42
IDENTIFICATION DIVISION
Kuk
Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
Forero desde (Registrado)diciembre 2014
España
UbicaciónMadrid
Edad34 años
Última Actividad26.05.2019 22:17
PROCEDURE DIVISION
PostsPosts: 1.380
Ha dicho GraciasEnviado: 302
Ha recibido agradecimientosRecibido: 522
Mejores respuestasSoluiones: 85
ReputaciónReputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado

Nitzer, ¿qué tal, lo has probado?


NORMAS DEL FORO - obligatorias de conocer para TODOS.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale Pinchando en su Nick:

Kuk está en línea   Responder Con Cita
  #19
Antiguo 5 de mayo de 2019, 15:36
IDENTIFICATION DIVISION
Nitzer
Guru de COBOL
ENVIRONMENT DIVISION
Avatar de Nitzer
DATA DIVISION
Forero desde (Registrado)noviembre 2015
España
UbicaciónAlmeria
Edad53 años
Última Actividad16.05.2019 15:20
PROCEDURE DIVISION
PostsPosts: 70
Ha dicho GraciasEnviado: 32
Ha recibido agradecimientosRecibido: 37
Mejores respuestasSoluiones: 3
ReputaciónReputación: 7
Nitzer is on a distinguished road Nitzer is on a distinguished road Nitzer is on a distinguished road Nitzer is on a distinguished road
Predeterminado

Cita del post de Kuk Ver Mensaje
Nitzer, ¿qué tal, lo has probado?
Hola Kuk, aún no he podido, estoy con un proyecto complejo, pero te prometo que lo voy a hacer, a comprender y a poner aquí la experiencia

Ya puestos te cuento el proyecto con el que estoy full-time

Mejor, mañana tiro fotos y os lo cuento.
Nitzer no ha iniciado sesión   Responder Con Cita
Ha dicho Gracias : 1
Kuk ( 5 de mayo de 2019)
Respuesta

Tags
cobol 2002 , cobol85 , createthread , oo-cobol , thread , winapi


Usuarios activos actualmente viendo este tema: 1 (0 miembros y 1 visitantes)
 
Herramientas

Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado



La franja horaria es GMT +1. Ahora son las 22:23.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2019, Jelsoft Enterprises Ltd.