Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-07-2007
emeceuy emeceuy is offline
Miembro
 
Registrado: jun 2003
Ubicación: Uruguay
Posts: 122
Poder: 21
emeceuy Va por buen camino
bucle infinito

Esta es un poco la continuacion de un hilo, pero como creo que cambio un poco el planteo, lo vuelvo a postear, y dejo el link del anterior: http://www.clubdelphi.com/foros/show...626#post215626

Les cuento, quiero hacer algo así como un bucle infinito para sacar una frecuencia por el puerto paralelo. Ya tengo solucionado la salida por el puerto, el tema es como generar la frecuencia. Me comentaron que la solucion podía ser con hilos, peo no logro entender.

Quiero hacer algo así como un bucle infinito, que corra mientras corra el programa. El problema es que si por ejemplo utilizo un while o un for, no tengo manera de detener el bucle, o de cambiar un valor de un edit por ejemplo mientras corra el bucle, y necesito poder cambiar un valor.

por ejemplo, podría poner al crear o activar el form un bucle (el que genera la repeticion), que llama a otro que se llama FRECUENCIA (el que larga la salida del puerto, que tiene como parametro el EDIT1) y un procedimiento al pulsar un boton que pone la variable var_detener en true;

procedure OnFormActivate(Sender: TForm);
begin
var_detener:=false;
repeat FRECUENCIA(edit1.text)
until var_detener=true;
end;

si yo hago esto, no tendría manera de pulsar el boton para detener el bucle, ni tampoco tendría manera de cambiar el edit, porque estaría el bucle corriendo... entonces, como puedo lograr algo así? continuo? y que me permita variar parametros, apretar botones y utilizar la ventana?

PD: antes he probado usando un timer, pero necesito una velocidad mucho mas grande que la del timer, necesito algo así como la velocidad de un bucle

muchas gracias a todos desde ya !!! salu2
__________________
Marcelo C.
Responder Con Cita
  #2  
Antiguo 19-07-2007
Avatar de white_zombie
[white_zombie] white_zombie is offline
Miembro Premium
 
Registrado: nov 2005
Ubicación: Zaragoza - España
Posts: 187
Poder: 19
white_zombie Va por buen camino
Hola, si quieres correr un bucle y que la aplicacion atienda a otros eventos mientras este esta en ejecucion, hay un opcion y es onidle (creo que se llama asi ya que no estoy en mi ordenador y hablo de memoria), esto lo que hace es ejecutar el codigo que tu le digas solo cuando esta ocioso el programa.

El problema de esto es que dices que la velocidad de un timer no es suficinte (ya necestias rapidez, desconozco hasta que unidad minina llega el timer pero supongo que bastante pequeña), bueno a lo que iba, si la aplicacion hace poco cosa puedes probar y ver si es sufientemente rapido pero no siempre sera igual de rapido debido a que no tiene prioridad.

En el foro seguro que hay informacion sobre onidle.

Si utilizas threads, dependiendo de lo que haga el programa no siempre se ejecutara el codigo a la misma velocidad ya que cuantos mas hilos tengas que atender mas lento ira.

Un saludo.
Responder Con Cita
  #3  
Antiguo 19-07-2007
emeceuy emeceuy is offline
Miembro
 
Registrado: jun 2003
Ubicación: Uruguay
Posts: 122
Poder: 21
emeceuy Va por buen camino
No estoy seguro que sea OnIdle lo que necesito, ya que en realidad justamente no quiero que el programa esté oseoso, el bucle sería la actividad principal, y aunque haya otras actividades ésta debe ser la prioritaria.

Cuando probé con el timer, descubrí que aunque la unidad mínima era 1ms, no variaba de 50ms hacia abajo, por lo cual empíricamente creo que la unidad minima efectiva del timer son 50ms.

Lo que necesito en definitiva es algo así como un bucle "permanente", pero que me permita cambiar un edit, o apretar un boton, si es que se puede... algo similar a como funciona un timer... inclusive podría ser un timer pero que ejecute mucho más rapido que el timer comun, o sea, algunas veces más lento que la velocidad de un bucle...
__________________
Marcelo C.

Última edición por emeceuy fecha: 19-07-2007 a las 21:32:00.
Responder Con Cita
  #4  
Antiguo 19-07-2007
Khronos Khronos is offline
Miembro
 
Registrado: abr 2007
Posts: 298
Poder: 18
Khronos Va por buen camino
Lo mejor seria utilizar un timer con el intervalo a 1, tendrias un evento ke se lanzara cada milisegundo.
Podrias usar otra cosa pero nadie en su sano juicio la usaria ya que se emplea en programacion virica y tiende a dejar colgado el programa o el sistema .
Hablo de GoTo. Solo la nombro.


procedure TForm1.FormActivate(Sender: TObject);
label continuo;
begin
continuo:
FRECUENCIA(edit1.text);
Goto continuo;
end;



Espero haberte ayudado.

Salu2

Última edición por Khronos fecha: 19-07-2007 a las 22:48:38.
Responder Con Cita
  #5  
Antiguo 19-07-2007
emeceuy emeceuy is offline
Miembro
 
Registrado: jun 2003
Ubicación: Uruguay
Posts: 122
Poder: 21
emeceuy Va por buen camino
muchas gracias por las respuestas... lo del timer lo descarto, porque ya he probado y es bastante más lento de lo que necesito, así que intentaré de la manera innombrable jajajaja y veré que tan sano está mi juicio
__________________
Marcelo C.
Responder Con Cita
  #6  
Antiguo 19-07-2007
emeceuy emeceuy is offline
Miembro
 
Registrado: jun 2003
Ubicación: Uruguay
Posts: 122
Poder: 21
emeceuy Va por buen camino
no me funciona :(

he probado y no me funciona... es como si fuera un bucle comun y corriente, porque muestra a la label1 incrementandose muy rapidamente, pero no puedo destildar la casilla de verificacion, ni apretar el boton, ni nada...

les dejo el codigo con el que probé

Código Delphi [-]
procedure FRECUENCIA(numero:integer);
begin
   form1.label1.caption:=inttostr(numero);
   form1.Refresh;
end;

procedure TForm1.Button1Click(Sender: TObject);
label continuo;
var numero:integer;
begin
numero:=0;
continuo:
   begin
      numero:=numero+1;
      FRECUENCIA(numero);
      if checkbox1.checked then Goto continuo
   end;
end;
__________________
Marcelo C.
Responder Con Cita
  #7  
Antiguo 19-07-2007
Khronos Khronos is offline
Miembro
 
Registrado: abr 2007
Posts: 298
Poder: 18
Khronos Va por buen camino
Ya te dije ke tiende a dejar colgado el programa o el sistema, por eso se utiliza en la programacion virica .
A mi no se me ocurre nada mas, si descartastes lo del timer y repeat no veo muchas mas opciones.
Responder Con Cita
  #8  
Antiguo 19-07-2007
emeceuy emeceuy is offline
Miembro
 
Registrado: jun 2003
Ubicación: Uruguay
Posts: 122
Poder: 21
emeceuy Va por buen camino
Unhappy

es que no tengo muchas más opciones no tengo más remedio que descartar las anteriores... el timer no me sirve porque va muy lento para lo que necesito, y el repeat y el goto no me permiten variar cosas de la pantalla, como un edit o apretar un boton
__________________
Marcelo C.
Responder Con Cita
  #9  
Antiguo 20-07-2007
Gregory Mazon Gregory Mazon is offline
Miembro
 
Registrado: jun 2003
Posts: 22
Poder: 0
Gregory Mazon Va por buen camino
Hola pon la siguiente instruccion y listo, resuelto el problema
Application.ProcessMessages;

Código Delphi [-]
procedure FRECUENCIA(numero:integer);
begin
   form1.label1.caption:=inttostr(numero);
   form1.Refresh;
end;

procedure TForm1.Button1Click(Sender: TObject);
var numero:integer;
begin
  Numero := 0;
  Repeat
      numero:=numero+1;
      FRECUENCIA(numero);
      Application.ProcessMessages;   
  Until termina;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Termina := true;
end;
Responder Con Cita
  #10  
Antiguo 20-07-2007
emeceuy emeceuy is offline
Miembro
 
Registrado: jun 2003
Ubicación: Uruguay
Posts: 122
Poder: 21
emeceuy Va por buen camino
Gregory, mil gracias !!! creo que esa es la solucion que buscaba

salu2 mArCe
__________________
Marcelo C.
Responder Con Cita
  #11  
Antiguo 20-07-2007
[fer21unmsm] fer21unmsm is offline
Miembro Premium
 
Registrado: dic 2005
Ubicación: Lima
Posts: 627
Poder: 19
fer21unmsm Va por buen camino
Hola en todo caso, también puedes utilizar hilos y/o servicios para lo que deseas

saludos
__________________
"La información tiene más valor cuando se comparte"
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
La linea se repite hasta el infinito URBANO Impresión 3 06-12-2005 08:23:55
float hasta el infinito... eli.vidal Varios 2 15-11-2005 18:50:01
bucle dentro de un bucle Cosgaya Varios 2 06-06-2005 07:05:16
infinito infinitoespasmo Debates 18 16-12-2004 21:34:00
Detener un bucle lfidanza Varios 5 25-06-2003 00:36:14


La franja horaria es GMT +2. Ahora son las 13:54:08.


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