Page 1 of 1

Como interrumpir un bucle?

PostPosted: Thu Nov 30, 2006 5:43 pm
by Rafael Clemente
Tengo un botón y un bucle Do while, en el que hago las mediciones. Quisiera que al pulsar el botón terminase el bucle. Ahora lo hago así:

Code: Select all  Expand view
@ r,c, Button "Stop"..... ACTION lOk := .F.
lOk := .T.
Do While lOk
     MiFuncionDeMedir()
     ....
Enddo


Pero reacciona muy lentamente. O sea: Entre la pulsación del botón y el fin del bucle pasan algunos segundos. ¿Hay alguna forma de hacer un Break inmediato? Existe alguna función del API de windows o algo así? Gracias

Rafael

PostPosted: Thu Nov 30, 2006 6:03 pm
by Antonio Linares
Rafael,

Prueba a llamar a SysRefresh() en el bucle:
Code: Select all  Expand view
Do While lOk
     MiFuncionDeMedir()
     SysRefresh()
Enddo

PostPosted: Thu Nov 30, 2006 7:19 pm
by Rafael Clemente
Antonio:
Tengo varios SysRefreh() tanto en el bucle como en MiFuncion(). La variable lOk está declarada como Pública.

Más o menos la cosa funciona. "Pastosa", pero funciona. Sólo quería saber si había alguna función escondida por ahí que permitiese forzar una interrupción más ágil, algo así como una interrupción por teclado...

Gracias

Rafael

PostPosted: Fri Dec 01, 2006 12:48 pm
by Antonio Linares
Rafael,

Ese proceso lo estás haciendo en bases de datos en la tarjeta de memoria ? Procura hacerlo en ram, no en la tarjeta.

PostPosted: Fri Dec 01, 2006 1:01 pm
by Rafael Clemente
Antonio:
El proceso consiste simplemente en capturar unos strings de seis cifras que llegan via RS-232 a un ritmo de uno cada diez segundos. Una vez capturado, lo grabo en un Dbf. Programa y datos los tengo en la tarjeta de memoria, en la misma carpeta. Intentaré pasarlos a RAM.

Por cierto, ahora abro las tablas como USE CurDir()+"\Tabla.dbf". Si pongo el programa en RAm pero mantendo las dbfs en la tarjeta, como he de acceder a ella? Quiero decir: Ya no será Curdir(), no?

Saludos,

Rafael

PostPosted: Fri Dec 01, 2006 1:06 pm
by Antonio Linares
Rafael,

Las tarjetas de memoria son algo lentas en acceso a escritura. Procura poner las DBFs en ram. Para usarlas puedes seguir usando CurDir(), si las tienes en donde esté la aplicación (en RAM también). Si no es el caso, especifica su path "carpeta\...".

Cuando el proceso termine, cópialas a la tarjeta de memoria, en caso de que necesites llevarte la tarjeta a otra parte.

Estoy interado en esto

PostPosted: Mon Dec 04, 2006 1:12 pm
by mjcc
Como puedo colocar las bases de datos en RAM.

gracias
imjcc@mjccsl.com

PostPosted: Mon Dec 04, 2006 1:35 pm
by Antonio Linares
> Como puedo colocar las bases de datos en RAM.

tenlas en cualquier directorio que no sea "SD card" ó "Tarjeta Memoria"

Gracias

PostPosted: Mon Dec 04, 2006 1:47 pm
by mjcc
Gracias