• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 604
  • Last Modified:

how to control Thread

helow

so here's my programm

i have program wich reads rows from table after its read one row programm [with TThread] sends a file to specific location.

this all works just fine but how to control this TThreads how can i know when all Threads i made finished the job.

///exsample
var finished:boolean;

programm makes 25 Threads
after all Threads finished the job >>> finished:=true;
/////////////////

thx to u
0
Kristao
Asked:
Kristao
1 Solution
 
kretzschmarCommented:
? why not let the therad finish itself ?
-> just do not loop in the execute-method

usual u do there


  while not terminated do
  begin
    //yourStuff
  end;
end;

you can also  do it this way

  //yourStuff
  Terminate;
end;

just as suggestion

meikl ;-)
0
 
EvarestCommented:
As kretzschmar suggested you might want to let the threads terminate themselves. You can then attach an OnTerminate event to each thread. This event will then be called when it's being terminated. In this OnTerminate Event you can place dec(MyCounter) which will decrease some value. If this reaches zero, the job is finished...

Hope this helps!
Evarest
0
 
KristaoAuthor Commented:
? why not let the therad finish itself ?

:) becouse i need to know when all threads are finished becouse some smart ass can close the programm and all thread will be terminated even when thread is in progress :)

my programm is server so when its gets connection wich ask to make the job then reciveconnection:= false and while thread are in progres reciveconnection will still be false i need to know when last last thread ends so i could put reciveconnection:=true :)

i made something like this:

i made one counter its name is ct:integer;

ct:=rowcount

while not(table.eof) do begin
sends procedure to execute
end;

procedure Tname.Execute;

begin
  Sendfile(dend procedure here);
  synchronize(StB);
end;

procedure TName.StB;
begin
  inc(ct);
  gpr_tredi.MaxValue =ct then
  begin
    reciveconnection := true;
  end
  else begin
    lb_status.Caption := 'TThread in progress';
    lb_status.Refresh;
  end;
end;

yes its works :)

i just thout there is something more interesting then my version but thanks for good ideas

0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now