Visual Basic - Ralentizar un bucle For

Life is soft - evento anual de software empresarial
   
Vista:

Ralentizar un bucle For

Publicado por apacheco (63 intervenciones) el 15/12/2011 17:37:13
He heredado un aplicacion en VB6, que da la posibilidad de generar listados en html, excel y/o word.

La ejecucion consite en crear un DATAGRID LUEGO CONVERTIRLO a HTML con con el proceso siguiente:

For FILA = 1 to grid.rowcount -1
aqui se genera la cabecera de linea de HTML (<TR> .........)
FOR COLUMNA = 1 to grid.colcount -1

(aqui se incoporan loa datos a la linea)


NEXT COLUMNA
aqui se cierra la linea de HTML (......... </TR> )
NEXT FILA

En listados pequeños (de pocas filas) FUNCIONA BIEN, hasta ahora.

El problema suege cuando grid.rowcount = 2475, YA QUE EL BUCLE GRIPA EL ORDENADOR, Y HAY QUE CANCELAR EL PROCESO.

He realizado el proceso em modo debug (con F8) y ha funcionado

¿Que puedo hacer para que p.e cada 50 lineas el proceso se detenga un cierto tiempo que estudiare para que sea lo mas efectivo posible (p.e. 2 seg).

Valdria la Api Sleep ......

Gracias por la ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ralentizar un bucle For

Publicado por Guido (71 intervenciones) el 12/01/2012 20:54:45
Visual Basic (la menos hasta la versión 6) incluye la sentencia doevents, justamente para "devolverle" al sistema operativo la posibilidad de hacer otros procesos mientras se está ejecutando código exigente (normalmente los bucles For-Next toman todo el reloj).

Prueba colocar una o más sentencias DoEvents dentro del bucle.
Otra alternativa es usar el bucle DO : LOOP (en este caso serían 2 bucles anidados), disponiendo las variables FILA y COLUMNA como enteros que deberás incrementar en cada paso.
Ej.
DIM FILA AS LONG, COLUMNA AS LONG

DO
FILA = FILA +1
aqui se genera la cabecera de linea de HTML (<TR> .........)
DO
COLUMNA = COLUMNA +1
(aqui se incoporan loa datos a la linea)

LOOP UNTIL COLUMNA = grid.colcount -1
aqui se cierra la linea de HTML (......... </TR> )
LOOP UNTIL FILA = grid.rowcount -1

por supuesto también en este caso se puede incorporar DOEVENTS (ej. dentro del primer bucle)

espero sirva.
saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar