Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Sintaxis] Crear pausa en un bucle con un Timer (https://www.cobolforo.es/showthread.php?t=696)

Josber 4 de agosto de 2017 21:36

Crear pausa en un bucle con un Timer
 
Tengo un Timer a 1001 milisegundos, y lo necesito en un proceso, que toma la fecha y la hora del sistema para crear unos códigos únicos con un bucle, una vez creado el primero, activo el timer, todo dentro de un bucle perform, y vuelvo a cargar la fecha y hora, así hasta el final. Dento del evento del timer, lo único que tengo es la desactivación del timer, el resto es desde un botón, pero no me funciona el timer, ¿puede ser que no se pueda usar el timer por estar dentro de un perform?

Un saludo.-

Kuk 6 de agosto de 2017 09:34

Josber, según entiendo, si en el evento Timer no tienes nada, ¿intentas que haga una especie de pausa en tu PERFORM? Si es así, no va a funcionar, porque par la "pausa" hay que ejecutar el código dentro del evento Timer.

Josber 7 de agosto de 2017 09:39

Sí kuk, eso es lo que necesito, tengo una rejilla, que puede contener uno o mil registros, a esos registros hay que crearles un campo que es el que creo con la fecha y la hora, por lo que necesito que se cree cada campo con, al menos, un segundo de diferencia, para que no tengan el mismo valor un campo con el anterior.

Lo que hace la rutina es leer la rejilla desde el primero hasta el último con un perform, y dentro del evento timer, se crea el código que necesito y se actualiza la rejilla informando que ese campo se ha creado, pero no funciona.

Éste es el código que uso:

Código COBOL:
  1.      MOVE "Count" OF VIEW2 TO CONTA1.
  2.  
  3.      PERFORM VARYING CONTA FROM 1 BY 1
  4.              UNTIL CONTA > CONTA1
  5.  
  6.                    MOVE 1           TO "Active" OF TIMER1
  7.                    MOVE CONTA   TO "Value"  OF PROGRESO
  8.  
  9.      END-PERFORM.

Un saludo.-

Fito 7 de agosto de 2017 15:39

hola:

Por qué no tomas la hora la primera vez y después le sumás conta a esa variable. Con el Timer me parece que no te va a funcionar.

Saludos.

Fito...

Josber 7 de agosto de 2017 16:36

Cita:

Citación del post de Fito (Mensaje 3358)
hola:

Por qué no tomas la hora la primera vez y después le sumás conta a esa variable. Con el Timer me parece que no te va a funcionar.

Saludos.

Fito...

Gracias Fito, estaba ya barajando esa posibilidad, porque no atino a solucionar la otra forma.

Un saludo.-

Fito 7 de agosto de 2017 16:59

hola:

No tengo mucha experiencia en el uso del timer, a lo mejor estoy diciendo una burrada, pero me parece que el timer corre en un hilo paralelo, no te va a "frenar" el proceso.

Saludos.

Fito...

Kuk 7 de agosto de 2017 22:38

Josber, por lo pronto, que yo sepa puedes usar FUNCTION CURRENT-DATE o ACCEPT FROM TIME y ambos te sacan los milisegundos. En cuanto al timer, sí que va a funcionar. Lo que debes hacer es lo siguiente:

Defines tus CONTA como GLOBAL en la WORKING del Form.
En el botón (o donde tengas el inicio del proceso) haces:

Código COBOL:
  1.      MOVE POW-TRUE  TO "Active" OF CmTimer1

En el Timer haces:
Código COBOL:
  1.      IF  CONTA <= CONTA1
  2.          MOVE FUNCTION CURRENT-DATE(pos:lon) TO TU_GRILLA
  3.          ...
  4.      ELSE
  5.          MOVE POW-FALSE TO "Active" OF CmTimer1
  6.      END-IF

Pero de todos modos, hacer esperar al cliente 1000 segundos por ello me parece un poco demasiado. Creo que si lo haces con el bucle cogiendo los milisegundos obtendrás valores diferentes. En el peor de los casos, mete en el bucle una llamada a la WinAPI "Sleep" pasandole 1 milisegundo y tema resuleto ;)

Hrmcobol 7 de agosto de 2017 22:44

Hola Amigos !!!!, el timer corre independiente del perform, es como te dice fito, o por lo menos es lo que me parece a mi también, yo tomo la hora de 8 dígitos, Horas-Minutos-Segundos-Centésimas. Según el código que pusiste el Habilitar o no el timer no detendrá el proceso.
Saludos
Hrm

Josber 8 de agosto de 2017 19:17

A ver, al final he hecho lo de aceptar la fecha/hora, sumar 1 a un contador y fuera, Kuk, ya no he probado lo que has puesto, pero estoy con Fito y Hrmcobol, me da que el timer corre independientemente del perform, o por lo menos esa es la experiencia que he tenido.

Kuk, en cuanto a hacer esperar al cliente 1000 segundos, no es así, son milisegundos, osea 1 segundo por cada registro y como normalmente no son más de 100 registros, no hay problemas por eso. Todo viene porque se "olvidan" de introducir un código de barras EAN-13, y para que no esté repetido, lo calculo con la fecha, en formato AAMMDDHHMMSS, que suman doce más el dígito de control, así me aseguro de que nunca haya uno repetido, de ahí venía el tener que hacer una pausa de 1 segundo entre registro y registro.

Un saludo y gracias a todos.-


La franja horaria es GMT +2. Ahora son las 14:38.

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