Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-10-2004
israelgs israelgs is offline
Registrado
 
Registrado: oct 2004
Posts: 8
Poder: 0
israelgs Va por buen camino
actualizar aplicacion

Tengo un problema haber si me pudieran ayudar


Mi problema es que tengo que hacer que lea en este while cada milisegundo

Esta en builder c++ 6

TDateTime Time;

while(true)
{
//saco el tiempo
Time=Now();
//Le doy formaro a la variable de tiempo
uno=Time.FormatString("hh:nn:ss zzz");
Memo1->Lines->Add(uno);
Sleep(1);// un milisegundo
Application->ProcessMessages(); // procesar los demas mensajes
}

Corriendo ejemplo
Hora:Minuto:Segundo:Milisegundo
00:34:17 921
00:34:17 937
00:34:17 953
00:34:17 968
00:34:17 984
00:34:18 000
00:34:18 015

Lo que quisiera es lo siguiente
¿Es posible esto?
00:34:17 921
00:34:17 922
00:34:17 923
00:34:17 924
00:34:17 925
00:34:17 926
Responder Con Cita
  #2  
Antiguo 06-10-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por israelgs
Código:
TDateTime Time;
 
while(true)
{
//saco el tiempo 
Time=Now();
//Le doy formaro a la variable de tiempo
uno=Time.FormatString("hh:nn:ss zzz");
Memo1->Lines->Add(uno);
Sleep(1);// un milisegundo
Application->ProcessMessages(); // procesar los demas mensajes
}
Creo que son demasiadas cosas para hacer en un milisegundo... Si haces unas cuanteas cosas (Now() tarda bastante y actualizar las líneas del memo también) y luego además le dices que espere 1 milisegundo (sleep(1)) es poco probable que puedeas conseguir una resolución de 1 milisegundo.
Deberías probar con un Timer y colocar el Interval a 1 (y eliminar el Sleep), aunque creo que sigue siendo una resolución muy pequeña.
¿exactamente qué necesitas hacer cada milisegundo?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 06-10-2004 a las 09:51:37.
Responder Con Cita
  #3  
Antiguo 06-10-2004
Avatar de barman
barman barman is offline
Miembro
 
Registrado: may 2003
Posts: 139
Poder: 22
barman Va por buen camino
Si necesitas tanta precision, no te va a quedar mas remedio que programarlo con un TThread, que es un hilo independiente.
Responder Con Cita
  #4  
Antiguo 06-10-2004
israelgs israelgs is offline
Registrado
 
Registrado: oct 2004
Posts: 8
Poder: 0
israelgs Va por buen camino
¿Sera seguro esa respuesta (Threads)?

para empezar a programar threads porque necesito precision

Gracias saludos
Responder Con Cita
  #5  
Antiguo 08-10-2004
Avatar de barman
barman barman is offline
Miembro
 
Registrado: may 2003
Posts: 139
Poder: 22
barman Va por buen camino
Hombre pues deberias de saber que en informatica no hay nada seguro.

Depende de lo que quieras hacer, puedes hacerlo con un thread, que corre paralelo a tu aplicacion (programacion con Hilos), y asi no deberias de hacer el Application ->Proccesmessage(), tambien puedes crearte un componente deribado de TMemo y le metes un TTimer activado a xxxx milisegundos, a bote pronto no se me ocurre otra cosa.
Responder Con Cita
  #6  
Antiguo 09-10-2004
israelgs israelgs is offline
Registrado
 
Registrado: oct 2004
Posts: 8
Poder: 0
israelgs Va por buen camino
Gracias por sus opinione
Responder Con Cita
  #7  
Antiguo 15-10-2004
Sonic Sonic is offline
Miembro
 
Registrado: may 2004
Posts: 40
Poder: 0
Sonic Va por buen camino
Buenas a todos!

Mi experiencia cada vez que he trabajado con restricciones de tiempo es que en Windows es muy dificil mantenerlas a "raja tabla" , cuando pones un Timer y le das un tiempo tienes que contar con que tu proceso (y dentro de él, tu hilo) sea el que está activo en el procesador en ese instante, si no, se irán acumulando retrasos.

En concreto, yo necesitaba actualizar ciertos valores cada 30ms y al cabo de 24 o 48 h el error ya era de minutos, lo que hice fue poner un timer cada 10ms y comprobar el tiempo con las funciones ftime. Si habían pasado 30ms desde la última actualización entonces se hacía una nueva actualización de las variables y también del contador. De este modo no consigues asegurar que cada 30 milisegundos se te actualicen las variables, pero al menos los errores no se te acumulan y te aseguras un error instantáneo del 33%.

Claro que si necesitas procesar algo cada 1ms siendo esta la resolución máxima del Timer.... no vas a conseguir mucho. Tengo un amiguete que tuvo un problema similar y creo que lo resolvió porque encontró unos componentes freeware en los que se incluía un Timer de mayor precisión y resolución.

Espero haberte ayudado en algo e intentaré ponerme en contacto con mi amigo para ver si te puedo conseguir el nombre de dichos componentes el Lunes.

Saludos a todos!
Responder Con Cita
  #8  
Antiguo 15-10-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Prueba con algunos de los que hay en ésta página:

http://swiss.torry.net/timers.htm

* HighResTimer v.1.02
* HPCounter v.1.1
* HPTimer v.1.2
* TSuperTimer v.1.0.2
* Tztimer v.1.00
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 18-10-2004
Sonic Sonic is offline
Miembro
 
Registrado: may 2004
Posts: 40
Poder: 0
Sonic Va por buen camino
Vaya!

Parece que se me han "BIENadelantado". Muchas gracias Netfalí espero que con eso sea suficiente para israelgs.

Saludos a todos!
Responder Con Cita
  #10  
Antiguo 21-12-2004
Avatar de OSKR
OSKR OSKR is offline
Miembro
 
Registrado: nov 2004
Ubicación: San Cristóbal/Táchira/Venezuela
Posts: 389
Poder: 20
OSKR Va por buen camino
Quita el Sleep()
Quita el Application->ProcessMessages();
Puedes hacer esto
while(true)
Memo1->AddLines(Now().FormatString("hh:nn:ss zzz"));
si por el contrario es muy rapido escribeme bgracso@hotmail.com




OSKR
Responder Con Cita
  #11  
Antiguo 21-12-2004
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Talking No se puede lograr tanta precision

Yo estuve probando ya hace un tiempo de lograr una presicion un poco mayor y lo logre.
El TTimer no sirve cuando se necesita exactitud.
El punto es que Windows 98 trabaja con esa resolución. Por lo que cualquier componente de tiempo siempre va a tener une error superior a ese.
Los mejores timers que encontre son los de Indy, te los recomiendo.
Pero no el componente sino las funciones y clases que vienen con él. Especialmente StartCount(), JCLTimer y TJclMultiMediaTimer.
Proba con los 3 y quedate con lo que mas te guste

Suerte

Crandel
__________________
[Crandel]
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 19:29:19.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi