GARANTIR DESCONTO

Fórum Retorno JSON usando multithreads #586016

19/09/2017

0

Olá,

gostaria de trocar uma ideia aproveitando o gancho threads, sempre tive uma dúvida que mesmo pesquisando e através deste artigo esclareceu um pouco mais, mas ainda não é o suficiente para sanar.

Tenho a seguinte situação: digamos que eu tenha um webservice onde possua uma classe que herda da TTHREADS e esta classe deve realizar um consulta em uma tabela determinada e retornar um objeto JSON para ser recebido por uma aplicação externa que a chamou.

Este web service poderá ser consumido por mais de uma aplicação simultaneamente, ou seja, terá conexões concorrentes com o mesmo banco e tabela simultaneamente e isso com multithreads.

O que até hoje não consegui ter certeza é qual é a melhor forma de fazer este retorno JSON para cada instância de thread. Além disso, e se o resultado for entregue para a thread errada ou deixar alguma thread sem resultado?

A melhor forma seria um atributo público da thread do tipo JSON e antes de liberar da memória eu deveria retornar este.
A grosso modo digamos assim como no exemplo abaixo:
TMinhaThread = class(TThread)
   private      
     procedure ThreadOnTerminate(sender : TObject); 
    protected
      procedure Execute; override;
    public
      FResultado: JSON;
	  constructor Create; reintroduce;
   end;

procedure TMinhaThread.ThreadOnTerminate(sender : TObject);    
begin
  TMinhaThread(sender).resultado := //atribui registros serializados no formato json
end;
   
procedure TMinhaThread.Execute;
var
  //componentesconexao
begin
   //realiza conexão
   .
   .   
   
end;
   

EVENTO NO WEB SERVICE ONDE INSTANCIOU A(S) THREAD(S)   
   var
  NovaThread: TMinhaThread;
 Begin
  NovaThread := TMinhaThread.Create(True);
  NovaThread.FreeOnTerminate := True;
  try
    NovaThread.OnTerminate := ThreadOnTerminate;
    NovaThread.Resume;
    //ResultadoWebService tipo json
    ResultadoWebService := NovaThread.resultado; 
	
  except on EConvertError do
    begin
       NovaThread.Free;
       ShowMessage('Não é um número válido!');
    end;
  end;
 end;


O que realmente não consigo ver de forma tão clara é, por exemplo, como ter certeza que a chamada "A" do web service que instanciou a thread "1" receberá o resultado da thread "1" e não será atribuído o resultado de uma thread "1" para a chamada "B", e vice-versa, quando existirem conexões simultâneas e threads concorrentes consequentemente?

Obrigado desde já pela ajuda.


Essa dúvida foi gerada a partir de um comentário no artigo Delphi Threads: Utilizando Threads em Delphi
Domper Ltda

Domper Ltda

Responder

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

Aceitar