Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Thread Problem: "Not enough quota is available to process this command"

Posted on 2003-11-19
12
Medium Priority
?
7,035 Views
Last Modified: 2012-06-27
Hello I have a application that spaws 2 threads every five seconds.

After a day of doing this,  I start getting this message: "Not enough quota is available to process this command"

In the C++ area I did find some answer on this subject but i'm not sure how to applied it in Delphi?


Mike Colonna
 
0
Comment
Question by:colonna_mike
  • 4
  • 3
  • 2
9 Comments
 
LVL 8

Expert Comment

by:gmayo
ID: 9785810
I make that over 34000 threads in one day... what on earth are you doing?!?! Do the threads die after a while?

Geoff M.
0
 
LVL 2

Expert Comment

by:Robn
ID: 9789065
"spaws 2 threads every five seconds" - what is this application doing and what is the cap on the number of threads your application creates?
Your application is eventually going to spend most of its time in context switching and die (as you have noticed).
Some people seem to believe that the more threads the application has running, the faster or more efficent it must run. This is not the case at all.

Regards,
Rob
0
 

Author Comment

by:colonna_mike
ID: 9791582
Hi,
please let me explain:
As I stated earlier the application spawns 2 threads one thread checks some directories to see if any files have arrive, if so the files names and some other information is added to a Database.  The thread then ends until the next interval.

Next, the other thread will fires off and checks to see if any files have been added.
If so it does some stuff and once the database table is empty this thread will end until the next intervals

Below is the Main thread code:

procedure TForm2.OnTerminateInsert(Sender: TObject);
begin
if not Assign(Run.FatalException) then log('error in the Insert thread!!');
IsScanning := False;
 end;


procedure TForm2.OnTerminateRun(Sender: TObject);
begin
if not Assign(Run.FatalException) then log('error in the run thread!!');
ClearLabels;
isRunning := False;
bhaveFile := False;
end;

Thread 1:
procedure TForm2.InsertTimerTimer(Sender: TObject);
begin

  if not isScanning  then
  begin
       isScanning := True;
          if not Assigned(Insert) then Insert := TInsert.Create(True)
            else
             begin
               // Insert.Free;
                Insert := nil;
                Insert := TInsert.Create(True);
             end;

        Insert.FreeOnTerminate := True;
        Insert.OnTerminate :=HandleTerminateInsert;
        Insert.Resume;
 end;
end;

Thread 2:
procedure TForm2.Timer1Timer(Sender: TObject);
begin
  if not isRunning  then
  begin
            isRunning := True;
          if not Assigned(Run) then Run := TRun.Create(True)
            else
             begin
               // Run.Free;
                Run := nil;
                Run := TRun.Create(True);
             end;
        Run.FreeOnTerminate := True;
        Run.OnTerminate :=HandleTerminateRun;
        Run.Resume;
 end;
 end;


I hope this clears things up...

Mike
0
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.

 

Author Comment

by:colonna_mike
ID: 9791661
Sorry,  The two OnTerminate method are not right

procedure TForm2.OnTerminateInsert(Sender: TObject);
begin
IsScanning := False;
 end;


procedure TForm2.OnTerminateRun(Sender: TObject);
begin
ClearLabels;
isRunning := False;
bhaveFile := False;
end;

0
 
LVL 8

Expert Comment

by:gmayo
ID: 9795863
From the code you've posted, your threads don't appear to be ending. Run your program and look in Task Manager. Click on the Processes page. Select View -> Select Columns. Select thread count and sit back to watch your program. Do the threads stay fairly constant or is it going up every second?

Geoff M.
0
 

Author Comment

by:colonna_mike
ID: 9795987
Hi gmayo

Yes threads do appear to ending?
Mike C.
0
 
LVL 2

Expert Comment

by:Robn
ID: 9796709
I cannot determine if the threads are terminating or not by the code you have posted. Can you post the code in the execute method please?

Regards,
Rob
0
 
LVL 8

Accepted Solution

by:
gmayo earned 200 total points
ID: 9805564
Maybe there is some limitation on number of completed threads per day? That wouldn't surprise me, Windows having an artifical limit. However, that doesn't help you so all I can suggest is re-writing the thread so it doesn't end and simply waits a second for the next check.

For example:
procedure TMyThread.Execute;
begin
  ...do setup code...
   while not Terminated do begin
      ...do check code
      Sleep(1000);
   end;
   ....do cleanup code...
end;

Geoff M.
0
 

Author Comment

by:colonna_mike
ID: 9806413
You know that just might work, I've beating myself up trying to figure out a way around this..

I'll give this try and let you know how I make out...


MIke C.
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

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

In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
Integration Management Part 2
Look below the covers at a subform control , and the form that is inside it. Explore properties and see how easy it is to aggregate, get statistics, and synchronize results for your data. A Microsoft Access subform is used to show relevant calcul…
Suggested Courses

824 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