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]