Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: sebastianarroyo en 20 de Noviembre de 2005, 01:37:17 AM

Título: Manejar Tiempo
Publicado por: sebastianarroyo en 20 de Noviembre de 2005, 01:37:17 AM
 Hola, en esta oportunidad estoy tratando de logra lo siguiente y realmente no se como hacerlo.-

For a = 0 To 255
Label1.Caption = a
Next a

Necesito que label1 valla subiendo de a poco, es decir: la suba de 0 a 255 tiene que durar un tiempo que yo lo pueda detrminar ( ejemplo:1 segundo )
Antes lo realizaba con un sleep a referencia de "kernel32" , el problema es que me dormia todo el proyecto y da la sensacion de conjelamiento.-
Si alguien sabe como puedo hacer para realizar esto se lo agradezco.-
Sebastian !
Título: Manejar Tiempo
Publicado por: Lex en 20 de Noviembre de 2005, 03:13:42 AM
...
Título: Manejar Tiempo
Publicado por: shephiroth en 20 de Noviembre de 2005, 04:43:02 AM
 Buenas.

Si estas usando el namespace System, el siguiente codigo te puede servir:

static System::DateTime diferencia = new System::DateTime(0,0,0,0,0,1); // Especifica 1 segundo
static System::DateTime anterior = new System::DateTime::get_Now();
System::DateTime actual = new System::DateTime::get_now();
if ( (actual - anterior) > diferencia)
{
//codigo q quieras q haga
anterior = System::DateTime::get_Now();
}


Si no estas usando ese namespace, bien puedes usar este pequeño truco xDD

static DWORD diferencia = 1000; //Especifica 1000 milisegundos = 1 segundo
static DWORD anterior = getTickCount();
DWORD actual = getTickCount();
if ( (actual-anterior) > diferencia)
{
//codigo q quieres q se haga
anterior = getTickCount();
}


Este segundo necesita un pequeño arreglo, pero como ves es muy parecido al anterior. El problema q tiene es q puede darse el caso q anterior > actual, en cuyo caso nunca jamas podrías reentrar dentro. Se podría solucionar cambiando el if........
if ( (actual - anterior) > diferencia) || ( anterior > actual && actual > diferencia)

En cualquier caso, suerte ^^
Título: Manejar Tiempo
Publicado por: samsaga2 en 20 de Noviembre de 2005, 12:57:06 PM
 La solucion optima es la que ha propuesto Lex tira de un timer lo programas cada segundo y alli ya haces lo que quieres. La solucion de shephiroth estaba bien en tiempos de ms-dos en donde no tenias que preocuparte por la carga en la CPU, consumir el 100% de CPU para hacer una simple pausa...

No se que version de Visual Basic estas usando pero si usas VB.Net hay una funcion sleep en el modulo de threads (no me la se de memoria). Si en cambio la version anterior de VB... que dios te ampare XD
Título: Manejar Tiempo
Publicado por: zupervaca en 20 de Noviembre de 2005, 02:38:31 PM
Cita de: "samsaga2"La solucion optima es la que ha propuesto Lex tira de un timer lo programas cada segundo y alli ya haces lo que quieres. La solucion de shephiroth estaba bien en tiempos de ms-dos en donde no tenias que preocuparte por la carga en la CPU, consumir el 100% de CPU para hacer una simple pausa...

No se que version de Visual Basic estas usando pero si usas VB.Net hay una funcion sleep en el modulo de threads (no me la se de memoria). Si en cambio la version anterior de VB... que dios te ampare XD
sin entrar en flames ni cosas raras, creo que windows no hace los timers de forma magica, no obstante como windows nos da esa funcionalidad debemos de usarla
Título: Manejar Tiempo
Publicado por: [EX3] en 20 de Noviembre de 2005, 10:37:26 PM
 
Cita de: "samsaga2"No se que version de Visual Basic estas usando pero si usas VB.Net hay una funcion sleep en el modulo de threads (no me la se de memoria). Si en cambio la version anterior de VB... que dios te ampare XD
Ya 'tamos' con las coñas? :P

Tres opciones validas en Visual Basic 6.0: