Prezados Amigos,

Tudo bem?

Tenho que desenvolver uma aplicação que receberá vários
bloco de 2kb
através de uma porta específica. Acontece que estes blocos
são da
ordem de milhões/hora e a única forma que imaginei seria, a
cada bloco
que eu receber na porta que estou escutando (uso delphi 4 e com o
componente TServerSocket), pensei em armazenar em um arquivo
binário
em um diretório específico.

Uma outra aplicação estará full time pesquisando este
diretório
verificando a existência dos arquivos. Existindo, irá lê-los,
processá-los e apagá-los.

Consegui simular a chegada dos blocos de 2k sendo que estou usando
threads para isso, tendo em vista a imensa quantidade que terei de
gravar o tempo todo e não posso (de jeito nenhum) perder nenhum
bloco
destes que receber. Acho que até aí está correto não ? :)

Bom, quando a thread é chamada, reparei que ela cria uma
instãncia no
gerenciador de tarefas, e várias ao mesmo tempo. Queria ter
certeza de
liberar a memória após a gravação de cada arquivo,
desafogando a máquina. 

Eu chamo a thread assim:
  GeraArquivo := TGravaArquivo.Cria(Socket.ReceiveText);

Segue o código da thread:

unit UThreadGravaArquivo;

interface

uses
  Classes, SysUtils ;

type
  TGravaArquivo = class(TThread)
  private
    { Private declarations }
    vMeuConteudo : String;
    F : TextFile;
  protected
    procedure Execute; override;
    procedure Processo;
  public
    constructor Cria(vConteudo: String);
  end;

Const
     caminho_App = 'D:\Pulse\Pulse_Desktop\unread\';

implementation

{ Important: Methods and properties of objects in VCL can only be used
in a
  method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure TGravaArquivo.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ TGravaArquivo }

constructor TGravaArquivo.Cria(vConteudo: String);
begin
    Create(False);
    vMeuConteudo := vConteudo;
    FreeOnTerminate := True;
end;

procedure TGravaArquivo.Execute;
begin
     Synchronize(Processo);
end;

procedure TGravaArquivo.Processo;
var
  Year, Month, Day, Hour, Min, Sec, MSec: Word;
  varq: string;
begin
  DecodeDate(Now, Year, Month, Day);
  DecodeTime(Now, Hour, Min, Sec, MSec);
  varq := 'cdr_' + IntToStr(Day) + IntToStr(Month) + IntToStr(Year)+
IntToStr(Hour) + IntToStr(Min) + IntToStr(Sec) +IntToStr(Msec) +
'.cdr';
  try
     if not FileExists(caminho_App + varq) then
     begin
         AssignFile(f, (caminho_App + varq) );
         Rewrite(f);
     end;
    Write(f,vMeuConteudo);
    CloseFile(f);
    except
         raise;
  end;

end;

end.

Desde já agradeço a atenção dispensada.

Atenciosamente,

Fabiano Monteiro




-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 




Responder a