Indeed, I am wanting to keep the label updated.
And with the TTimer I could keep the label updated every second, but if
I just put
Synchronize(UpdateLabel)
in various places in the Thread then it could go for a few seconds without being updated... which again is why I used a TTimer.
So really, I should move the TTimer out of the thread.
And start it when I call
MyThread := TMyThread.create...
ProgTimer.enabled := false;
and then
MyThread.Terminate;
ProgTimer.enabled := false;
and
procedure TForm1.ProgTimerOnTimer...
begin
//update label
end
Thanks :-)
Nick
Conor Boyd wrote:
If you're wanting to see how long the thread takes, you'd be better to
just save the value of Now to a temporary StartTime variable or similar
before you start your thread, and then in your OnTerminate method you
can subtract that value from the current value of Now() to get the
elapsed time.
I don't see why you'd use a TTimer to find out how long something is
taking. TTimer is for causing an event to fire at particular intervals.
If you want to keep the label updated as your thread executes you could
have an UpdateLabel method on your form which calculates the elapsed
time since StartTime, and then from within the loop in your thread's
Execute method, use Synchronize(UpdateLabel) to actually tell the form
to update the label.
HTH,
C.
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
On Behalf Of Nick Fauchelle
I have the TTimer there so I can have a timer displayed on my form so
the user can see how long the process has taken. Perhaps I should move
the Timer out of the Thread and have it on the form instead.... and
then I guess with my OnTerminate I could synchronize a call to
ProgTimer.Enabled := false.
Would that be a better option?
I couldn't do the sleep option below as im not trying to Sleep the
program, more just keep a label updated with a count of the time.
Thanks :-)
Stefan Mueller wrote:
Timers in a thread sounds indeed very dodgy! - TTimer works with
windows messages (messageloop from your mainthread ... and you are
calling into your own thread - this is a big no-no!).
Usually a "Sleep(1000);" (or better a Sleep(50); inside 20 loops with
a check for terminated) in your "Execute" procedure will be a better
option.
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Conor Boyd
I'm not sure initially, but you may have to look at having your
application (i.e. the main VCL thread) wait at shutdown time until
your sub thread has successfully terminated after being told to do so.
The other thing is that using Ttimer in a thread may be well dodgy,
but that's just a hunch. Why are you having to use a timer?
I haven't had to do that myself before, and I'm not sure what the
timer is doing that's weird.
Look at calling WaitForSingleObject from the main VCL thread or
similar, and see if that helps. I can't help you with that straight
off, as I haven't had to do that before.
Good luck. If I think of anything else, I'll let you know.
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]
On Behalf Of Nick Fauchelle
Hmmm ok,
So I got that going, and all seems well - my thread has set
freeonterminate := true; when it was created.
But when I terminate it (try) it seems to work, except when I then
close the application I get a Access Violation error..
This only happens when I have objects freeing in my destructor like so
begin
ProgTimer.Free;
ADOQ1.Free;
IdHttp.Free;
inherited;
end;
However, if I don't have them there - my ProgTimer (TTimer) still
counts the count, even if I terminate the thread...
that was created like so in the creator
----
ProgTimer := TTimer.Create(nil);
ProgTimer.OnTimer := ProgTimerTimer;
ProgTimer.Interval := 1000;
ProgTimer.Enabled := true;
Both ProgTimer : TTimer and it's OnTimer event are declared in the
private section of my thread.
---
Im thinking it may have something to do with the nil.
So,
If I terminate, ProgTimer.OnTimer will still fire.
If I call ProgTimer.Free with the destructor then the timer stops
firing, but the program access violations when I close it.
[snip]
_______________________________________________
Delphi mailing list
[email protected]
http://ns3.123.co.nz/mailman/listinfo/delphi