idPOP3
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??
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á
Curtidas 0
Respostas
Massuda
14/05/2006
Como você fez sua thread?
GOSTEI 0
Rudá
14/05/2006
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;
GOSTEI 0
Rudá
14/05/2006
Alguem!
GOSTEI 0
Massuda
14/05/2006
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; ...
GOSTEI 0