Newsgroups : Borland : borland.public.delphi.nativeapi.win32 : 2005 Jul : 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