![]() |
Timer und Rechner-Belastung?
Hallo,
wie sieht es eigentlich bei der Verwendung von Timern aus? Beansprucht das viel Rechenleistung bzw. Bearbeitungszeit? Gruß Minz |
Hallo,
der Timer hat im System die niedrigste Priorität. Dürfte kaum auffalen wenn Du welche benutzt. ;) Grüsse, Daniel :hi: |
Zitat:
MfG Florian :hi: |
Ich habe aber mal gelesen, dass wenn man mehr als 7 Timer gleichzeitig Windows 'hängen' bleibt!! Habe ich noch nie ausprobiert!! Brauche meistens mir nur einen!!
Bye chris01 |
:twisted: Wir töten es mit kleinen Stoppuhren... Wer hat gesagt, dass man Knoblauch braucht? :twisted:
:lol: Ich probier das irgendwann mal aus :coder: Aber im Moment hab ich was zu tun und keine Lust den Rechner zu crashen... :| MfG Florian :hi: |
Hallo,
also die Anzahl der Timer dürfte wohl nicht entscheidend sein, wohl eher das was da drin passiert. 20 Timer die alle 100ms eine Message bringen, sind kein Thema. Unter Win2000 geht das ohne Probleme und ich meine das auch bei den "niederen" Betriebssystemen das auch kein Thema ist. ;) Grüsse, Daniel :hi: |
Hallo,
vielen Dank erstmal für die Beiträge... Wie siehts denn mit ähm mehreren 100.000 Timern aus, deren Intervall Zufällig eingestellt wird? :roll: :mrgreen: Grüßerle Minz P.S.: Die Frage war ernstgemeint! :D |
Moin Minz,
ich hab' mal 10000 Timer dynamisch erzeugen lassen (Interval := Random(1000)+20), denen das gleiche OnTimer Event zugeordnet und in diesem Event den Namen des gerade aufrufenden Timers in ein Memo geschrieben. Das gab dann so, wahrscheinlich wegen des Memos so 60% CPU Last. (Duron 700 / 768MB) Du kannst das ja mal mit dem was bei Dir beim OnTimer passieren soll selber probieren. |
Hmm probiere das gerade, wie bekomme ich denn den
Sendernamen des aufrufenden Timers? Den will ich nämlich anzeigen lassen... :?: |
Wenn der Timer mit niedriger Priorität läuft ist dann eigentlich bei hoher Rechenlast noch die Genauigkeit garantiert?
@Minz: Den Namen kriegst du mit
Delphi-Quellcode:
raus
Sender.Name
|
Moin MadMason,
Zitat:
|
Zitat:
|
Zitat:
MfG Florian :hi: |
Delphi-Quellcode:
Da meckert er undeclared identifier: 'name'
procedure TForm1.TimerProc(Sender: TObject);
begin label1.Caption:=Sender.name; end;
Delphi-Quellcode:
Oder liegt da irgendwo der Hase im Pfeffer begraben? Oder wars der Hund? :mrgreen:
procedure TForm1.FormCreate(Sender: TObject);
var i:integer; begin for i:=0 to 9999 do begin setlength(Timer, length(Timer)+1); Timer[high(Timer)]:=TTimer.create(form1); Timer[high(Timer)].Name:='Timer'+inttostr(high(Timer)); Timer[high(Timer)].interval:=random(10000)+1; Timer[high(Timer)].OnTimer:=TimerProc; end; end; |
Probier mal:
Delphi-Quellcode:
label1.Caption:=(Sender as TTimer).Name;
|
Das klappt schonmal ...
Leider kann ich nur um die 2500 Timer erstellen...beim compilieren kommt: --------------------------- Debugger Exception Notification --------------------------- Project Project1.exe raised exception class EOutOfResources with message 'Not enough timers available'. Process stopped. Use Step or Run to continue. --------------------------- OK Help --------------------------- Beim ausführen der exe kommt 'Not enough Timers available' Weiß jemand was das soll? Ich habe die Systemresourcen anzeigen lassen mit dem Windowstool, der zeigt noch über 80% verfügbar an. Die CPU-Auslastung ist bis dahin aber nicht erwähnenswert. (Athlon 1700+//256 MB RAM ) |
Was für ein OS?
|
win 98
|
Jupp. Windows98 gehen schnell mal die Ressourcen aus. Zu den Ressourcen zählen auch die verfügbaren Handles und ähnliches.
|
Wenn ich mich nicht täusche, sind bei einer alten Delphi-Version, weiss nicht welche, nur 6 Timer möglich. Hab ich mal wo aufgeschnappt, kann ich aber nicht zu 100% sagen.
Welche Delphi-Version hast du? mfg Daniel |
habe Delphi 6
Kann es vielleicht sein, dass Delphi von vornherein nicht den gesamten Speicher verwendet? Also z.B. reserviert er Speicherplatz für Objekte nur ein paar MB so wie Stack oder Heap (oder was es da so gibt) Deswegen konnte Christian mit 768 MB vielleicht auch 10000 Timer erzeugen. Ich habe nur 256 MB. Diesen vorab reservierten Speicher könnte man doch dann bestimmt erhöhen bzw. veranlassen, dass der gasamte verfügbare Speicher verwendet wird. Grüße Minz |
Sag mal, liest hier eigentlich auch jemand meine Antworten? Christian hat bestimmt auch Windows2000 oder XP und da sieht das mit den Ressourcen schon wieder ganz anderes aus.
|
Ja sorry, aber schwerlich zu akzeptieren, dass es aufgrund von
Win98 keine Lösung für das Problem gibt :freak: Bei allem Respekt kannst du nicht wissen, welches Betriebssystem er damals verwendet hat (Duron700-Zeit) es sei denn er hats dir gesagt :wink: oder aber sein Duron 700 ist sein aktueller Rechner. Aber dat geht jetzt auch am Thema vorbei. Friede pls :angle: |
Was heißt damals? Und ich meine zu wissen, dass er Windows2000 einsetzt.
Nur weil da Duron 700 steht heißt das noch lange nicht, dass es lange her ist, dass er das getestet hat. Es kauft sich eben nicht jeder aus reinen Profilierungsgründen alle halbe Jahr den neusten Rechner. |
Was soll "Duron-700 Zeit" bedeuten.
Meiner tuts halt noch. mfg Daniel |
Ist ja gut ist ja gut, wenn du sein post gelesen hast steht da:
...Ich habe einaml... Wenn ihr daraus macht: er hat zu dem Zeitpunkt 2000//XP verwendet dann ok ...und kein Grund feindseelig zu werden oder Profilierungsgründe zu erwähnen, weshalb sich jemand einen Rechner kauft, sei ihm überlassen. Und jetzt lasst den Threat bitte nicht in ein Streitthread verwandeln, davon gabs bei Delphi-Source genug, weshalb ich von Delphi-Praxis begeistert war, weil da alle so freundlich sind :love: Danke Minz |
Das hat doch nichts mit Feindseeligkeit zu tun, wollt nur mal anbringen, dass ich noch meinem 750er Duron vertraue.
mfg Daniel |
Jo, meinte ja auch nicht dich :)
|
Moin Zusammen,
nur um das mal zu klären: Der Duron 700 ist mein aktueller Rechner, und läuft unter W2K SP2. In manchen Fällen kann man den schönen Satz aus dem Automobilbereich (Hubraum statt Spoiler) auch auf den Computer übertragen (MB statt MHz) :mrgreen: Was den Speicherbedarf der 10000 Timer anging: In der Prozessliste lag das Programm mit einer Speicherbelastung von ca. 5,5 MB. @Sanchez: Das mit den sechs Timern kann eigentlich nicht stimmen, da man diese ja auch über die API Funktionen erzeugen kann. TTimer kapselt diese ja nur. @Minz: das fiese an den geringen Resourcen die Win9x zur Verfügung stehen ist ja, dass das OS selber "Speichermangel" meckert, wenn ihm die Handles ausgehen, was dann oft in der Frage mündet: "Ich hab' doch xxxMB Speicher, und sonst läuft nichts, wieso kommt die Meldung?" |
Brauchen Timer eigentlich Handles? Eigentllich sind Timer ja nur Windows-Messages. Lediglich das TTimer-Objekt braucht Thread-Handle und -ID, da die OnTimer-Prozedur ja in einem eigenen Thread läuft. Bearbeitet man das Timer-Ereignis im Hauptthread, dürften doch keine zusätzlichen Resourcen benötigt werden, oder?
|
@Minz:
Delphi-Quellcode:
Bei diesem Code brauchst du nur eine Timer-Komponente und kannst beliebig viele "virtuelle" Timer erzeugen, die in verschiedenen Abständen auslösen.
type
TForm1 = class(TForm) Timer1: TTimer; Memo1: TMemo; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } FTimeOffsets: array[0..1000] of Byte; FTimeElapsed: array[0..1000] of Byte; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Timer1Timer(Sender: TObject); var i: Integer; begin for i := Low(FTimeOffsets) to High(FTimeOffsets) do begin if FTimeElapsed[i] = FTimeOffsets[i] then begin FTimeElapsed[i] := 0; // irgend etwas machen: Memo1.Lines.Add('Virtueller Timer ' + IntToStr(i)); end else Inc(FTimeElapsed[i]); end; end; procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begin Randomize; for i := Low(FTimeOffsets) to High(FTimeOffsets) do FTimeOffsets[i] := Random(256); end; |
Liste der Anhänge anzeigen (Anzahl: 1)
sprich ich kann das Prob nur mit nem neuen Betriebssystem umgehen? :(
verdammich aber auch... Ob du da mal die Grenze austesten kannst? Ich schick dir gerne auch das Programm zu, dann kannst du da direkt die Anzahl eintippseln (direkt im Quellcode :mrgreen: ) Weil des würd ich gerne Wissen, bevor ich jetzt erst ein neues Betriebssystem aufspiele. War sonst mit Win98 eigentlich zufrieden. Gruß Minz |
ah danke Niko, habs zu spät gelesen...ganz verstehen tu ich das ding
allerdings noch nicht... werds mir nochmal anschauen... ------------ Achso, kapiert, allerdings durchläufst du dann bei jedem mal die gesamte Liste der virtuellen Timer! Das wollte ich eigentlich umgehen, weil ich sehr viele Timer verwenden will. |
Eine andere Möglichkeit, die virtuellen Timer mit unterschiedlichen Abständen aber regelmäßig auslösen zu lassen wüsste ich jetzt nicht...
Allerdings denke ich, dass der einfache Vergleich und das Hochzählen des Wertes auf aktuellen Rechnern auch bei 20000 oder mehr Schleifendurchläufen kein Problem darstellen sollte - und wahrscheinlich sogar ressourcenschonender ist als das Erzeugen von 20000 echten Timern. |
Moin Minz,
falls denn die Frage nicht zu indiskret wird ;-) Wozu brauchst Du eigentlich so viele Timer? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz