Newsgroups : Borland : borland.public.delphi.nativeapi.win32 : 2005 Jul : Threads and SOAP problem...

www.cryer.info
Managed Newsgroup Archive

Threads and SOAP problem...

Subject:Threads and SOAP problem...
Posted by:"Guillermo Halys" (guillermohal..@yursoft.com)
Date:Tue, 5 Jul 2005 10:16:42

Hi codis mens, im write a few code that use a thread to launch a call to
Amazon's web service.
In a single thread code works fine, but when I put it into a thread, it
doesnt work.
Also if I call to Showmessage, also it doesnt show and after close the
program I get a error from windows with the message: Not valid window ID.


<<CODE>>

In "Execute" procedure of the thread:

   with TScriptAmazonAWS3.Create() do
   begin
     Detalles := BuscarPalabraClave(Texto,CategoriaAmazon);
     Free;
   end;

"BuscarPalabraClave" procedure:

function TScriptAmazonAWS3.BuscarPalabraClave(Valor: string; Categoria:
String): Details;
var
   ParamBusqueda: KeywordRequest;
   Productos: ProductInfo;
   i: integer;
   ColaPeticiones: TObjectQueue;

   Fichero: TFileStream;
begin
   Result := nil;

   with GetAmazonSearchPort(True) do
   begin
     ParamBusqueda := KeywordRequest.Create;
     ParamBusqueda.keyword := Valor;
     ParamBusqueda.page := '1';
     ParamBusqueda.mode := Categoria;
     ParamBusqueda.tag := 'webservices-20';
     ParamBusqueda.type_ := 'heavy';
     ParamBusqueda.devtag := 'catalogador';

     Fichero := TFilestream.Create('c:\shit.txt',fmCreate);

     // Establecemos los parametros
     //<<<< HERE THE REMOTE METHOD DOESNT WORK, NOTHING DO >>>>
     Productos := KeywordSearchRequest(ParamBusqueda);

     //<<<< "Fichero" NEVER GOES TO BE FREED.    
     Fichero.Free;

     if StrToInt(Productos.TotalResults) > 0 then
     begin
       // Creamos los almacenes de detalles y de elementos temporales
       ColaPeticiones := TObjectQueue.Create;
       ColaPeticiones.Push(Productos);

       // Mientras no hayamos leido todas las paginas, las buscamos y
almacenamos
       while (StrToInt(ParamBusqueda.page) <>
StrToInt(Productos.TotalPages)) do
       begin
         // Metemos nuestra busqueda anterior en cola
         ParamBusqueda.page := IntToStr(StrToInt(ParamBusqueda.page)+1);
         Productos := KeywordSearchRequest(ParamBusqueda);
         ColaPeticiones.Push(Productos);
       end;

       // Despues de que el usuario seleccione el producto que le interesa.
       Result := Seleccionar(ColaPeticiones);
       ColaPeticiones.Free;
     end;
   end;
end;


Thanks
Guillermo Halys

Replies:

www.cryer.info
Managed Newsgroup Archive