Title: Message
Your second option should work fine.
 
You just need to make sure that items are removed fro the list when they are free'd.
 
I have done many little toys using that method.
 
A multithreaded solution will not be any faster because each thread will have to Synchronize with the VCL when it needs to update the screen.
 
Stacey
-----Original Message-----
From: Gajo Istvan [mailto:[EMAIL PROTECTED]
Sent: Wednesday, 14 January 2004 7:44
To: [EMAIL PROTECTED]
Subject: [DUG] Should I use threads? I need suggestions how to solve thisproblem!

I have a problem that I'm not sure how to solve. Perhaps I should do with threads, but that is something I've never done before, and since I don't really have the time to learn something new I would appreciate other solutions.
 
I have a class called TMoving, which is represented (visually) by a TBitmap. TMoving has several properties, but the most important are x,y and angle.
 
So when I press a key, I want a new TMoving to be created. A new TBitmap should also appear on the form (the bitmap and the TMoving object are two different objects!) OK, now I would like that in every 100 mseconds the object to move according to the angle. The new x and y are calculated by the CalcNewXY procedure. So I get the new X and Y, and I move the image there. When the image is out of the screen (width<x<0 and height<y<0) it should destroy itself.
 
So the problem is this: I need to have a variable number of TMoving objects. Each object should "move itself" without my intervention, in 2 ms, which perhaps involves a TTimer, although I could just use TickCount if it can be done.
 
Does this have to be done with threading or not? One of my solutions was to create a procedure that activates itself WHEN 2 ms have passed. Then it moves the object and Bitmap to the new location and calls itself yet again, with the parameter that is NOW+2 ms. The trouble is the old procedure (that has called itself) will take up memory until the new procedure has expired, and since there can be many many calls to that procedure it could cause a memory error. I would want the procedure to call itself, but also release "the used" itself at the same time.
 
The other solution of mine was to create a central list of TMoving objects and a TTimer which moves each object in every 2 ms, but it has failed for some reason, I think the object destroys itself before the Timer realises so it calls the destroyed object again. Again, this is a bad solution because if the number of TMoving increases the Timer will be unable to move each object at the same time. That is why it would be nice to have an "internal timer" (solution #1).
 
Any ideas?
 
Gajo
_______________________________________________
Delphi mailing list
[EMAIL PROTECTED]
http://ns3.123.co.nz/mailman/listinfo/delphi

Reply via email to