[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

TThread WaitFor

Posted on 2005-04-22
2
Medium Priority
?
1,730 Views
Last Modified: 2012-05-05
I'm trying to figure out the useage of certain TThread methods.

Currently, i have 4 checkboxes, and a button.

on button click event i do

if CheckBox1.Checked then
begin
 mode := 1;
 thread.create(false);
end;

if CheckBox2.Checked then
begin
 mode := 2;
 thread.create(false);
end;

etc...

this doesn't seem to work out all that well.

how would i either

1) wait for each of the if statements to finish before moving onto the next one

or

2) wait for the thread to finish then move onto the next if statement..

i set globals in the if statements, as you can see, so unless there is a way to pass these in the call, how would you do that?

thanks!
0
Comment
Question by:gwarguitar
2 Comments
 
LVL 15

Expert Comment

by:mikelittlewood
ID: 13847115
I have never used threads before,  and Im SURE someone will be able to tell you how to do it, but I just wanted to ask if that is how you actually create a thread correctly.

Is it not thread := TThread.Create(False) ?

This seems to be a popular thread information source so hopefully you might be able to gleam some information from here
http://www.midnightbeach.com/jon/pubs/MsgWaits/MsgWaits.html

gl
Mike
0
 
LVL 1

Accepted Solution

by:
jturpin earned 1000 total points
ID: 13851114
If you want the thread to finish before conitinuing then why not forget about the thread and just put the code inline?

Each if statement will finish before moving on to the next one: If the checkbox is checked then the process thread (the main program) will launch the thread (lets call it threadA)  and the process thread will move on to the next if statement. ThreadA will run when it gets a time slice.

Note, Mike is right. You do need to create the thread as he suggests.

Regarding the global variable you can pass it to the thread as a parameter. If you want to pass by reference you will need to set up critical sections inside the thread to access it. Otherwise pass itby value. To pass by value do this:

TMyThread = class(TThread)
  private
    myMode : Integer;
  public
    constructor Create(ThisMode:Integer; ThisCreateSuspended:Boolean);
end;

constructor TMyThread.Create(ThisMode:Integer; ThisCreateSuspended:Boolean);
begin
  inherited Create(true);
  myMode:= ThisMode;
  if (not ThisCreateSuspended) then
    resume;
end; {Create}


 
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

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

A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Please read the paragraph below before following the instructions in the video — there are important caveats in the paragraph that I did not mention in the video. If your PaperPort 12 or PaperPort 14 is failing to start, or crashing, or hanging, …
Whether it be Exchange Server Crash Issues, Dirty Shutdown Errors or Failed to mount error, Stellar Phoenix Mailbox Exchange Recovery has always got your back. With the help of its easy to understand user interface and 3 simple steps recovery proced…
Suggested Courses

834 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