Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

Zu viele Timer und Threads->Programm hängt?

  Alt 17. Nov 2006, 22:09
Ich hab hier eine Anwendung, die erzeugt massenhaft kleine Threads, die per Synchronize irgendeinen Job ausführen und dann ordnungsgemäß per 'FreeOnTerminate := True' terminieren. Weiterhin wird ständig ein Timer angeworfen, der leicht zeitverzögert irgendetwas anstellt.
So ein Thread sieht so aus:
Delphi-Quellcode:
Constructor TMyThread.Create (aEvent : TNotifyEvent; anObject : TObject);
Begin
  Inherited Create (True);
  fEvent := aEvent;
  fObject := anObject; // Hier war ein Schrebfehler (TObject statt anObject)
  FreeOnTerminate := True;
  Resume;
End;

Procedure TMyThread.Execute;
Begin
  Synchronize (DoEvent);
End;

Procedure TMyThread.DoEvent;
Begin
  fEvent(fObject);
End;
Sinn von dem Ganzen ist, das ich per Event auf Nachrichten reagieren muss. Ohne Synchronize hängt die Anwendung sofort. Mit dem Synchronize auch, nur später.

Nach Aufräumen und Einsatz eines Workerthreads, der die kleinen Threads ersetzt, läuft die Anwendung stabil. Ich schiebe also die aufzurufenden in eine threadsichere Liste und aktiviere dann den Workerthread, damit er sie abarbeitet. Der tut auch nix anderes als dann jedes Event über Synchronize aufzurufen, aber eben serialisiert und innerhalb eines Threads...

Ach, und sporadisch meldet Windows, das keine Timer mehr verfügbar sind, obwohl ich nunr einen Timer habe, der aber ziemlich oft angeworfen wird. Im OnTimer schaltet er sich erstmal aus und führt dann irgend eine Grütze aus.

Meine Frage: Habt Ihr Erfahrungen damit, das zu viele Threads und/oder Timer Windows durcheinanderbringen?

[edit] Schreibfehler im Beitrag von Sunlight7 korrigiert[/edit]
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat