AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Zu viele Timer und Threads->Programm hängt?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von alzaimar · begonnen am 17. Nov 2006 · letzter Beitrag vom 18. Nov 2006
Antwort Antwort
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, 23: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
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#2

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

  Alt 18. Nov 2006, 00:13
Hallo,

Jupp!

Ich hab bei einer meiner Kompos einen Timer gehabt, der alle 10 bis 40 MS ein und ausgeschaltet wurde, ne anders rum, aber egal.
Das Interval hab ich auch zugewiesen.
Es hatte prima funktioniert, nur ab und zu kam eine AV mit "Ungültiger Pointer Operation" und GetLastError sagte 5 (Zugriff verweigert)

Ich hab das dann so gelöst, das ich eine Hilfsvariable für Enabled und Interval genommen habe und nur bei Veränderung
die Eigenschaften vom Timer gesetzt habe.

Und eine Frage:
Delphi-Quellcode:
// Sollte das
fObject := TObject;
// Nicht so heißen ???
fObject := anObject;
Wegen:
fEvent(fObject);
Grüßle!
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz