FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Velocidad de un timer
Hola a todos.
Estoy con un proyecto en delphi y necesito usar un timer con algo de velocidad, me da 600 clicks en 10 segundos, con intervalo 1. Probé poniendo dos timers pero da el mismo resultado, ¿Cómo podría subirle la velocidad? (Para que diese así unos 800 o 1000 en 10 segundos) Saludos. |
#2
|
||||
|
||||
Intenta con la clase TThread, en el foro encontrarás muchos ejemplos y en la ayuda de Delphi una explicación completa.
Saludos. |
#3
|
|||
|
|||
Encontré esto es un blog:
Cita:
|
#4
|
||||
|
||||
En esencia, sí.
Mientras que un temporizador (clase TTimer) trabaja en el mismo "plano" que el resto de tu aplicación (se intercala el evento del temporizador con los eventos habituales de la interfaz de usuario y con los numerosos mensajes del sistema operativo), crear un hilo alterno, con las facilidades que ofrece la clase TThread, hace posible ejecutar tareas en segundo plano sin ninguna o poca interferencia por parte del resto de la aplicación. Digamos que cuando buscas precisión de tiempo, es mejor crear un hilo alterno que usar un temporizador. Saludos. |
#5
|
||||
|
||||
Cita:
|
#6
|
||||
|
||||
Hola Nerox.
Te muestro como podes ajustar la cantidad de veces por segundo que deseas que se dispare el evento con bastante márgen:
Ejemplo de uso:
Saludos. Edito: Casi me olvido... ¡ Bienvenido a Club Delphi !
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 14-05-2013 a las 21:57:16. |
#7
|
||||
|
||||
Impresionante ejemplo
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#8
|
||||
|
||||
ecfisa,
Excelente Nelson. |
#9
|
||||
|
||||
Solamente puedo decir +1
__________________
La Madurez se llama... ~~~Gaia~~~ |
#10
|
|||
|
|||
Saludos ecfisa.
Muchas gracias el código funciono. |
#11
|
|||
|
|||
Necesito me aclaren que estoy haciendo mal
Gracias por al ayuda, esta muy buena la clase que propuso ecfisa, pero no logro que me funcione como necesito, quizas es que estoy haciendo algo mal o omitiendo algo, pudieran ayudarme.
Básicamente lo que necesito es que en lo que se va procesando el procedmiento ProcessFile, me actualice los contadores en pantalla (Label0000 hasta Label2110), pero no lo hace, solo cuando hago clic en el label para detener el hilo es que se ejecuta todo. de lo contrario nunca termina y le tengo puesto a la clase F835File la propiedad EndParse que inicia en falso y cuando termina el proceso toma el valor verdadero, para poder tener referencia que terminó el proceso. La duración de este proceso depende del tamaño del fichero que estoy procesando y me ha durado entre 30seg hasta 2 minutos en los casos que tengo como refrencia. Código:
procedure TForm1.TimeThreadOnTime; begin // aquí el proceso que desees Inc(FCont); if FStopThread = false then begin FStopThread := true; ProcessFile; end; Label0000.Caption := IntToStr(F835File.Loop0000MaxId); Label1000.Caption := IntToStr(F835File.Loop1000MaxId); Label2000.Caption := IntToStr(F835File.Loop2000MaxId); Label2100.Caption := IntToStr(F835File.Loop2100MaxId); Label2105.Caption := IntToStr(F835File.Loop2105MaxId); Label2110.Caption := IntToStr(F835File.Loop2110MaxId); // fin proceso Application.ProcessMessages; if F835File.EndParse then StopThread; end; procedure TForm1.ProcessFile; begin if FileExists(FFileName) then begin F835File.Parse; if F835File <> nil then begin LabelLoop0000.Caption := IntToStr(F835File.Loop0000MaxId); LabelLoop1000.Caption := IntToStr(F835File.Loop1000MaxId); LabelLoop2000.Caption := IntToStr(F835File.Loop2000MaxId); LabelLoop2100.Caption := IntToStr(F835File.Loop2100MaxId); LabelLoop2105.Caption := IntToStr(F835File.Loop2105MaxId); LabelLoop2110.Caption := IntToStr(F835File.Loop2110MaxId); scMemoSchema.Lines.AddStrings(F835File.getSqlSchema); scMemoDelete.Lines.AddStrings(F835File.getSqlDelete); scMemoInsert.Lines.AddStrings(F835File.SqlData); scMemoFileParser.Lines.AddStrings(F835File.ParsedFile); scMemoLogError.Lines.AddStrings(F835File.LogError); end; end; end; procedure TForm1.BeginThread; begin if not Assigned(TimeThread) then begin FCont := 1; TimeThread:= TTimeThread.Create; // Intervalo expresado: 1/1000000 seg. (µs) TimeThread.Interval := 100000; {1/10 seg } TimeThread.OnTime := TimeThreadOnTime; TimeThread.Execute; end; end; procedure TForm1.StopThread; begin if Assigned(TimeThread) then TimeThread.Terminate; end; procedure TForm1.scLabel21Click(Sender: TObject); begin StopThread; end; |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Timer | coso | Trucos | 1 | 14-07-2008 11:28:56 |
Timer | comba | OOP | 3 | 18-06-2007 17:54:00 |
Timer | nenufer | Varios | 7 | 10-05-2006 17:35:17 |
Timer | ojimenezg2000 | Gráficos | 10 | 27-04-2006 15:56:02 |
timer +1 | slim jim | Varios | 4 | 02-10-2005 05:03:11 |
|