• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 271
  • Last Modified:

Out of timers

Hi,

My application uses a lot of timers while running.
After a few days of running, it is unable to create timers., i.e.
it is unable to execute "TTimer.Create", probably because of lack of system resources.
Even when I restart my application it still happens, and only when I reboot the computer I can continue working.

I work on windows NT 4.0 service pack 3 and Delphi 3.
I am pretty sure that I do free every timer I use, and I am suspecting that the NT has a limit for using timers.
I have checked for memory and resource leaks using TurboPower's Memory Sleuth, and there were no leaks.

Thanks,
  Ori.
0
oris
Asked:
oris
1 Solution
 
MotazCommented:
Make sure that you assign nil to Timer.OnTimer

Motaz
0
 
God_AresCommented:
How many timers are you using at once?

for what purpose?
0
 
TheNeilCommented:
There IS a limit on th number of timers that Windows can support simultaneously (can't remember what it is but 8 seems to be familair). Have you thought about using threads?

The Neil =:(
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
shenqwCommented:
you must release the timer when you don't need it.

I think you don't need so many timer.you can do it like this

var
 aTimeCounter:array of [0..255] of integer;
 aTimeLimit:array of [0..255] of integer;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i:integer;
begin
  for i:=0 to 255 do
  begin
    Inc(aTimeCounter[i]);
    if aTimeCounter[i]>aTimerLimit then
    begin
      //PostMessage or SendMessage
      aTimeCounter[i]:=0;
    end;
  end;
end;

0
 
msediCommented:
Hello,

you said you are sure you free a the timers. In order to check if that's right. Put a counter for created and a counter for freed timers. If there's a difference you know it definitely.

In order to free the timer use FreeAndNil("Timer") in order to force the Timer to be removed from the memory.

Good luck, Martin
0
 
mullet_attackCommented:
Hey msedit, thanks for the 'freeandnil' proc !

I've been using Delphi for 5 years, and I have never seen it !

Thanks, you can always learn...
0
 
EpsylonCommented:
FreeAndNil is new in Delphi 5....
0
 
orisAuthor Commented:
Adjusted points from 250 to 300
0
 
orisAuthor Commented:
msedi:
I did try putting counters and the results were (num of creates) - (num of frees) = 0.
I use Delphi 3, so I don't have the ability to use "FreeAndNil".

I suspect that NT has an absolute limit for using timers during an NT session.
0
 
msediCommented:
Hello,

sorry I couldn't find anything whether there is a restriction to the timer. Just look in the Win32 API Help. But I will have a look in the MSDN maybe there's an answer. By the way Epsylon is right FreeAndNil is new in D5. Here's the code of FreeAndNil, it's rather simple:

procedure FreeAndNil(var Obj);
var
  P: TObject;
begin
  P := TObject(Obj);
  TObject(Obj) := nil;  // clear the reference before destroying the object
  P.Free;
end;


Good luck,
Martin
0
 
MadshiCommented:
I cannot image that there would be a timer restriction in NT. How many timers do you have to create from a fresh boot of the system until you get the error?
Try to do something like this to test it:

var i1 : integer;
begin
  for i1 := 0 to 10000 do
    with TTimer.Create do
      try
        // here set all the properties
      finally Free end;

Does this simple program fail, too? Then it's the proove that either the TTimer component or Windows itself has a bug or restriction.

Regards, Madshi.
0
 
orisAuthor Commented:
I did some experiments, and there is a very good chance that I have a bug somewhere else in my program.

Martin,
I appreciate your efforts, so I will accept your comment as the answer.
Thanks,
Ori.
oris@math.tau.ac.il
0

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now