[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