Solved

how to control Thread

Posted on 2004-09-23
3
590 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
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

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
Hello everybody This Article will show you how to validate number with TEdit control, What's the TEdit control? TEdit is a standard Windows edit control on a form, it allows to user to write, read and copy/paste single line of text. Usua…
This video gives you a great overview about bandwidth monitoring with SNMP and WMI with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're looking for how to monitor bandwidth using netflow or packet s…
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

707 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now