Solved

how to control Thread

Posted on 2004-09-23
3
596 Views
Last Modified: 2010-04-05
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
Comment
Question by:Kristao
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 27

Accepted Solution

by:
kretzschmar earned 190 total points
ID: 12131454
? 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
 
LVL 4

Expert Comment

by:Evarest
ID: 12131507
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
 
LVL 1

Author Comment

by:Kristao
ID: 12131588
? 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

Enroll in May's Course of the Month

May’s Course of the Month is now available! Experts Exchange’s Premium Members and Team Accounts have access to a complimentary course each month as part of their membership—an extra way to increase training and boost professional development.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Printing problem 2 124
Delphi Form ownership 4 156
How to load 2 images in same column in Delphi 2 81
MS Access from Delphi 31 98
Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…

734 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question