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 15-07-2005
douguiehm douguiehm is offline
Registrado
 
Registrado: nov 2004
Posts: 7
Poder: 0
douguiehm Va por buen camino
Question Ttimer en un Unit

Que tal.

Estoy haciendo una aplicación que lee el puerto com1 para verificar si hay mensajes nuevos en un modem GSM.

Todo va bien, pero cuando pongo un Timer para que haga esta operación cada X segundos, el programa se alenta terriblemente, con lo cual llegué a la conclusion de que necesito separar el programa en dos partes:
  • Una visual donde se lean los mensajes y se escriban los mensajes nuevos.
  • Una no visual que solo haga el procesamiento de los mismos.
Todo va muy bien, pero en la parte no visual no logro configurar el Timer para que cada X segundos haga el procedimiento que necesito. En pocas palabras, no se como asignarle al Evento OnTimer un procedimiento.

Espero que me puedan ayudar.

Gracias
Responder Con Cita
  #2  
Antiguo 15-07-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
El OnTimer es un procedure of object, así que no puedes apuntarlo a un regular procedure. Si tel código que escribiste es una clase, no tendrás problema alguno:
Código Delphi [-]
  TMiClase = class
  private
    FTimer: TTimer;
    procedure OnTimer(Sender: TObject);
  public
    constructor Create;
    destructor Destroy; override;
  end;

implementation

{ TMiClase }

constructor TMiClase.Create;
begin
  FTimer := TTimer.Create(nil);
  FTimer.OnTimer := OnTimer;
  ...
end;

destructor TMiClase.Destroy;
begin
  FTimer.Free;
end;

procedure TMiClase.OnTimer(Sender: TObject);
begin
  { Tu código }
end;
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 15-07-2005
douguiehm douguiehm is offline
Registrado
 
Registrado: nov 2004
Posts: 7
Poder: 0
douguiehm Va por buen camino
Problema Resuelto

Mil gracias por tu respuesta no rápida sino inmediata.

El problema era exactamente que lo estaba apuntando a un regular procedure.

Puedo seguir.
Responder Con Cita
  #4  
Antiguo 15-07-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
No me agrada mucho, pero te escribí esto:
Código Delphi [-]
unit TimerRegularProcedure;

interface

uses
  ExtCtrls;

type
  TRegularProcedure = procedure;

  THackTimer = class
  private
    FTimer: TTimer;
    procedure OnTimer(Sender: TObject);
  public
    FRegularProcedure: TRegularProcedure;
    constructor Create;
    destructor Destroy; override;
  end;


var
  HackTimer: THackTimer;

implementation

uses
  Dialogs;

{ THackTimer }

constructor THackTimer.Create;
begin
  FRegularProcedure := nil;

  FTimer := TTimer.Create(nil);
  FTimer.OnTimer := OnTimer;
  FTimer.Interval := 5000;
  FTimer.Enabled := True;
  {...}
end;

destructor THackTimer.Destroy;
begin
  FTimer.Free;
end;

procedure THackTimer.OnTimer(Sender: TObject);
begin
  if Assigned(FRegularProcedure) then
    FRegularProcedure;
end;

procedure TimerEventos;
begin
  { Tu código}
  ShowMessage('Hola Mundo!');
end;


initialization
  HackTimer := THackTimer.Create;
  HackTimer.FRegularProcedure := TimerEventos;

finalization
  HackTimer.Free;

end.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 22-07-2005
douguiehm douguiehm is offline
Registrado
 
Registrado: nov 2004
Posts: 7
Poder: 0
douguiehm Va por buen camino
Muchas gracias por tus respuestas, pero ahora el programa tiene comportamiento raros:

Como ya comenté este programa lee datos del puerto com1 para verificar mensajes nuevos, el problema es que después de leerlos los decodifica de cierta manera, al final de la decodificación, ingreso esos datos en una base de datos, pero el programa no llega a esta parte, simplemente se la brinca o no se que pasa pero le pongo break points y ni siquiera los toca, se brinca al final del programa y el timer vuelve a empezar.

¿Será que se cumple el tiempo del Timer y este corta el procedimiento que estaba haciendo?

Por favor, ayudenme porque esto es lo último que me falta para poder empezar a hacer pruebas al sistema.
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 18:15:29.


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