Fórum idPOP3 #321348

14/05/2006

0

Estou usando o idPOP3 e o IdMessage e usando Thread para não travar a aplicação, só que encontrei um porem, vou explicar

Para solicitar a mensagem ele cria a Thread e usa o Retrieve para abaixar a mensagem, só que se a pessoa solicita a duas mensagens

Tipo?
TMyThread.Create(1,Memo1);
TMyThread.Create(2,Memo2);

ai recebo a primeira mensagem mas a segunda não recebo!

Ai quero tipo quando termina a primeira Thread execute a segunda, para que possa ser baixado as mensagens!

Alguem pode me ajudar??


Rudá

Rudá

Responder

Posts

15/05/2006

Massuda

Como você fez sua thread?


Responder

Gostei + 0

15/05/2006

Rudá

  TMyThread = class(TThread)
  private
    Mem: TMemo;
    Msg: Integer;
  protected
    procedure Execute; override;
    procedure Incrementa();
  public
    constructor Create(Memo: TMemo; NMSG: Integer; CreateSuspended: Boolean = False);
  end;


constructor TMyThread.Create(Memo: TMemo; NMSG: Integer; CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
Priority:= tpIdle;
FreeOnTerminate:= True;
Mem:= Memo;
Msg:= NMSG;
end;

procedure TMyThread.Execute;
begin
inherited;
Form1.POP.Retrieve(Msg,Form1.MSG);
Synchronize(Incrementa);
end;

procedure TMyThread.Incrementa;
var
i: Integer;
begin
for i:= 0 to Form1.MSG.MessageParts.Count - 1 do
begin
if(Form1.MSG.MessageParts.Items[i] is TIdText) then
Mem.Lines.AddStrings(TIdText(Form1.MSG.MessageParts.Items[i]).Body);
end
end;


procedure TForm1.Button3Click(Sender: TObject);
begin
POP.Connect;
TMyThread.Create(Memo1,1);
TMyThread.Create(Memo2,2);
end;



Responder

Gostei + 0

16/05/2006

Rudá

Alguem!


Responder

Gostei + 0

16/05/2006

Massuda

Acho que uma solução simples é fazer algo assim...

uses
  SyncObjs,
...

  TMyThread = class(TThread)
  ...
  end;

var
  CSMail: TCriticalSection = nil;

....

procedure TMyThread.Execute;
begin
  inherited;

  if CSMail = nil then
    CSMail := TCriticalSection.Create;
  CSMail.Enter;

  Form1.POP.Retrieve(Msg,Form1.MSG);
  Synchronize(Incrementa);

  CSMail.Leave;
end;
...



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar