![]() |
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 |
Cita:
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? |
Si necesitas tanta precision, no te va a quedar mas remedio que programarlo con un TThread, que es un hilo independiente.
|
¿Sera seguro esa respuesta (Threads)?
para empezar a programar threads porque necesito precision Gracias saludos |
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. |
Gracias por sus opinione
|
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 :D 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! |
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 |
Vaya!
Parece que se me han "BIENadelantado". Muchas gracias Netfalí espero que con eso sea suficiente para israelgs. Saludos a todos! |
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 |
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 |
La franja horaria es GMT +2. Ahora son las 07:09:48. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi