Pessoal essa coisa está me deixando de cabelos brancos.. Olha só, implemetando da maneira a qual o Thales disse tudo funciona perfeitamente mas o evento Ontimer não executa de jeito nenhum. Porem implementando da forma que nosso amigo kmkg disse o evento so roda depois que minha thread finaliza. O que para a aplicação não importa mais pois tudo deve ser executado em tempo de execução da thread. Vou esclarecer melhor a ideia do projeto. Como disse estou implementando uma classe que herda de TServerClientThread conforme exemplo abaixo CODE TFileServerThread = Class(TServerClientThread) private IdTerminal : String; TmrMessage : TTimer; public nregistro : String; finicial : String; ffinal : String; FWHandle : HWND; TempoInterval : Cardinal; Procedure ClientExecute; override; Procedure GetDataTx(idTerminal : String); Procedure ImportMessage(IDRemota : String; Msg : String); function crc16string(msg:string):string; function NumToHex(Num: Word): String; procedure TimerSincronize(Sender: TObject); function Implement(): Integer; End; O metodo ClientExecute é onde minha thread roda e é la dentro que irei instanciar meu objeto TTimer, ou SetTimer dependendo da implementação mas seja de qual for o modo ou pela instancia do Objeto TTimer ou pela Api SetTimer o metodo TimerSincronize não executa que na verdade seria o metodo associado ao OnTimer. Ou se pela outra forma a função de callBack não executa de jeito nenhum enquanto a thread estiver rodando, porem se a thread for finalizada dai o callBack executa. Acho que deve haver algum problema com o uso de timers dentro de threads. Pois pelo que vi o timer so funciona com a thread parada. Vejam uparte do codigo do metodo ClientExecute CODE Procedure TFileServerThread.ClientExecute; var SocketStream: TWinSocketStream; Begin inherited FreeOnTerminate := True; Try SocketStream := TWinSocketStream.Create(ClientSocket,frmServer.TimeOut); //INFINITE //frmServer.TimeOut); Try While Not Terminated And ClientSocket.Connected Do try FillChar(Data, SizeOf(Data), 0); qtdBytes := SocketStream.Read(Data, SizeOf(Data)); If qtdBytes = 0 Then Begin if (not frmServer.IsFrame(RecText)) and (length(RecText) > 13) then begin ClientSocket.Lock; ClientSocket.Disconnect(ClientSocket.Handle); ClientSocket.Close; Terminate; if TmrMessage <> nil then begin TmrMessage.Enabled := false; TmrMessage.OnTimer := NIL; TmrMessage.Free; end; ClientSocket.Unlock; end; If (ClientSocket.Connected) and (RecText <> '') Then Begin ClientSocket.Lock; if frmServer.IsProtocol () then //then (copy(RecText,1,1) = ':') and (copy(RecText,length(RecText),1) = ':') then begin LOG ('=>Modo de Recepção Configuração'); LOG ('=>Canal .: ' + IntToStr(ClientSocket.Handle)); LOG ('=>RX '+ RecText); LOG (''); if copy(RecText,2,2) = 'NS' then begin FlagResp := false; idTerminal:= copy(RecText,5,8); // SetTimer(0, 1, 3000, @Timer_Proc); // Executa a cada 3 segundos if TmrMessage = nil then begin Implement(); TmrMessage := Ttimer.Create(nil); TmrMessage.Interval := 3000; TmrMessage.OnTimer := TimerSincronize; TmrMessage.Enabled := true; end; end; ImportMessage(idTerminal,RecText); end End; Finally SocketStream.Free; End; Except ClientSocket.Close; Terminate; if TmrMessage <> nil then begin TmrMessage.Enabled := false; TmrMessage.OnTimer := NIL; TmrMessage.Free; end; End; End; Ps.: Veja onde esta de vermelho é a implementação de acordo com o Thales e de Azul de acordo com Kmgn sempre quando compilo de uma forma comento o outro. Obrigado pela ajuda pessoal , se alguém tiver mais ideias de como posso resolver fico agradecido.