[firebase-br] Timer em UDF

Eduardo Jedliczka edujed em gmail.com
Ter Abr 12 20:58:33 -03 2005


Alexandre, Chamadas de UDF no FireBird fazem o Banco Parar até que a UDF 
retorne, ele NÃO É multi-thread...

Então sua UDF não funfa, pois no return da DLL para o FB ele "destroi" 
(leia-se desaloca) sua Dll, então o timer não está rodando mais...

Isto não é uma boa prática de desenvolvimento e mais cedo ou mais tarde seu 
banco pode  "cair" e você perderá algumas noites de sono até lembrar que o 
problema pode ser este...

  [s]

  ==========================
  Eduardo Jedliczka
  Apucarana - Pr
  ==========================

----- Original Message ----- 
From: "Alexandre Trindade" <alexandre em habitus.com.br>
To: "Carlos H. Cantu" <listas em warmboot.com.br>; "FireBase" 
<lista em firebase.com.br>
Sent: Tuesday, April 12, 2005 7:36 PM
Subject: Re: [firebase-br] Timer em UDF


> Mesmo sendo um thread?
>
>
> ----- Original Message ----- 
> From: "Carlos H. Cantu" <listas em warmboot.com.br>
> To: "FireBase" <lista em firebase.com.br>
> Sent: Tuesday, April 12, 2005 2:41 PM
> Subject: Re: [firebase-br] Timer em UDF
>
>
>> Não faça isso! Quando uma UDF é chamada, o servidor fica esperando o
>> resultado dela para continuar o processamento. Colocar um timer dentro
>> de uma UDF é pedir pra ter dor de cabeça.
>>
>> []s
>> Cantu
>> http://www.warmboot.com.br
>> FireBase - http://www.FireBase.com.br
>>
>> AT> Ola amigos...
>>
>> AT> Estava tentando colocar um TIMER dentro de uma UDF para
>> AT> realizar algumas operacoes independente de uma chamada às funções
>> AT> da UDF. Qual não foi a minha surpresa ao perceber que o timer
>> AT> simplesmente não dispara....
>>
>> AT> O código ficou mais ou menos assim:
>>
>> AT> type
>> AT>  TMeuTimer = class(TComponent)
>> AT>   private
>> AT>     Timer: TTimer;
>> AT>     procedure OnTimer(Sender: TObject);
>> AT>   public
>> AT>     constructor Create(AOwner: TComponent); override;
>> AT>     destructor Destroy; override;
>> AT>   end;
>>
>> AT> var
>> AT>   MeuTimer : TMeuTimer;
>>
>> AT> constructor TMeuTimer.Create(AOwner: TComponent);
>> AT> begin
>> AT>   inherited Create(AOwner);
>> AT>   Timer          := TTimer.Create(Self);
>> AT>   Timer.OnTimer  := OnTimer;
>> AT>   Timer.Interval := 3000;
>> AT>   Timer.Enabled  := True;
>> AT> end;
>>
>> AT> destructor TMeuTimer.Destroy;
>> AT> begin
>> AT>   Timer.Free;
>> AT>   Timer := nil;
>> AT>   inherited Destroy;
>> AT> end;
>>
>> AT> procedure TMeuTimer.OnTimer(Sender: TObject);
>> AT> begin
>> AT>   DeleteFile('C:\Temp.txt');
>> AT> end;
>>
>> AT> initialization
>> AT>   MeuTimer := TMeuTimer.Create(nil);
>>
>> AT> finalization
>> AT>   MeuTimer.Free;
>> AT>   MeuTimer := nil;
>>
>>
>> AT> O interessante, é que tenho certeza de que a classe está
>> AT> sendo criada, mas o timer não dispara, como se o FIREBIRD não
>> AT> permitisse THREADs em UDFs....
>>
>>
>> AT> Alguém já tentou fazer algo do tipo?
>>
>> AT> []'s
>>
>> AT> Alexandre Trindade
>> AT> Analista de Sistemas
>> AT> ______________________________________________
>> AT> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
>> AT> Para editar sua configuração na lista, use o endereço
>> AT> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>> AT> Para consultar mensagens antigas:
>> AT> http://search.gmane.org/search.php?groupirebase
>>
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
>> Para editar sua configuração na lista, use o endereço 
>> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>> Para consultar mensagens antigas: 
>> http://search.gmane.org/search.php?group=firebase
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço 
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: 
> http://search.gmane.org/search.php?group=firebase 





Mais detalhes sobre a lista de discussão lista