Hola , gracias por responder , esta todo perfecto y mas facil , solo me falta poder dar una respuesta al evento OnTerminate() por parte del CreateTask()
El codigo :
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
const
MSG_START = 1;
var
iTask, numTasks, ReadTimeout: integer;
url: string;
begin
numTasks := 100;
url := 'http://localhost/';
ReadTimeout := 1000;
for iTask := 1 to numTasks do
begin
Application.ProcessMessages;
CreateTask(
procedure(const task: IOmniTask)
var
ReadTimeout: integer;
IdHTTP: TIdHTTP;
url: string;
ReturnValue:integer;
begin
task.Comm.Send(MSG_START);
url := task.Param['Url'].AsString;
ReadTimeout := task.Param['ReadTimeout'].AsInteger;
ReturnValue := 0;
IdHTTP := TIdHTTP.Create(nil);
try
IdHTTP.ReadTimeout := ReadTimeout;
IdHTTP.Get(url);
ReturnValue := 1;
finally
IdHTTP.Free;
end;
end).OnMessage(
procedure(const task: IOmniTaskControl; const msg: TOmniMessage)
var
taskNumber: integer;
begin
if msg.MsgID = MSG_START then
begin
taskNumber := task.Param['ReadTimeout'].AsInteger;
LogPoolStatus(Format('task %d / %d start', [taskNumber,
task.UniqueID]));
end;
end).OnTerminated(
procedure(const task: IOmniTaskControl)
begin
LogPoolStatus(Format('task id %d terminated', [task.UniqueID]));
end).SetParameter('url', url).SetParameter('ReadTimeout', ReadTimeout)
.Unobserved.Schedule;
end;
while GlobalOmniThreadPool.CountExecuting +
GlobalOmniThreadPool.CountQueued > 0 do
Application.ProcessMessages;
LogPoolStatus('ALL DONE');
end;
Me refiero a poder usar la variable ReturnValue que tenia en el codigo viejo en el Create() , si el idhttp sale bien entonces retorna 1 , si sale mal 0 , y poder leer la variable ReturnValue en el evento OnTerminated.Ya probe manualmente pero parece que si uso la variable en el Create() no llega a leerse en el OnTerminated().
Solo me falta ese pequeño detalle , espero haberme explicado bien ,ya casi termino.
¿ Como deberia hacerlo ?